phpenv 默认不启用 nginx expires 缓存头,需手动在站点独立配置文件(如 c:\phpenv\nginx\vhost\your-site.conf)的静态资源 location 块中添加 expires 1y 和 add_header cache-control "public, immutable",并重载 nginx 验证生效。

phpEnv 默认不启用 Nginx 的 expires 缓存头,必须手动修改站点对应的 Nginx 配置文件才能生效。
找到对应站点的 Nginx 配置文件位置
phpEnv 的每个站点配置独立存在,路径形如:C:\phpEnv\nginx\vhost\your-site.conf(Windows)或 /usr/local/phpenv/nginx/vhost/your-site.conf(Linux/macOS)。不要改全局 nginx.conf,否则所有站点共用同一规则,容易冲突。
- Windows 用户可在 phpEnv 控制面板里点击「站点管理」→「编辑配置」直接打开对应文件
- Linux/macOS 用户需用
sudo nano或vim打开该.conf文件 - 确认该文件中已包含
location ~ \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot)$ { ... }这类静态资源匹配块;若没有,需自行添加
在 location 块中添加 expires 指令
Nginx 的 expires 必须放在能匹配到静态文件的 location 块内,且优先级高于上级配置。常见写法如下:
location ~ \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot|webp)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
-
expires 1y表示缓存 1 年;也可用7d、30m等相对单位 -
add_header Cache-Control是补充策略,immutable能避免浏览器在if-modified-since场景下重复请求(尤其对带哈希名的构建产物有效) - 注意:不要在
location /或location ~ \.php$里加expires,否则 PHP 动态响应也会被缓存,导致页面不更新
重启 Nginx 并验证响应头是否生效
改完配置后必须重载 Nginx,不是重启整个 phpEnv 服务:
- Windows:在 phpEnv 控制面板点「Nginx → 重载」,或命令行执行
nginx -s reload - Linux/macOS:运行
sudo /usr/local/phpenv/nginx/sbin/nginx -s reload - 用浏览器开发者工具(Network → 刷新一个 JS/CSS 文件)检查响应头,确认出现
Expires和Cache-Control字段 - 若仍无缓存头,请检查是否误将
expires写在了if块或server块顶层——Nginx 不允许在这些上下文中使用expires
真正起效的关键不在“加没加”,而在“加在哪”——静态资源匹配路径是否准确、location 块是否被实际命中、有没有被更靠前的 location 规则覆盖。建议用 curl -I http://yoursite/static/test.js 直接看响应头,比依赖浏览器更可靠。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











