nginx静态资源日志应关闭以减小体积,仅保留动态请求日志;在phpenv虚拟主机配置中,需在server块内添加正则location规则关闭.js/.css/.png等静态文件的access_log,并设置expires缓存头,避免全局日志覆盖和升级后配置丢失。

phpEnv 里 Nginx 默认会把所有请求(包括 .js、.css、.png 等)全记进 access.log,不干预的话,几天就能涨到几百 MB,查日志卡顿、磁盘告警、备份变慢都是迟早的事。直接关全局日志不行——得留着动态请求(比如 /index.php)的日志做排查;真正该砍的是静态资源那部分。
在 phpEnv 的 Nginx 虚拟主机配置里加 location 规则
phpEnv 的站点配置文件实际路径是:C:\phpEnv\vhost\你的域名.conf(或 C:\phpEnv\vhost\default.conf)。别去改 nginx.conf 主配置——phpEnv 启动时会覆盖它。
打开对应 .conf 文件,在 server { ... } 块内插入以下两段(顺序无关,但必须在 location / { ... } 之外、同级):
location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|svg|webp)$ {
access_log off;
expires 30d;
}
location ~ .*\.(js|css|ttf|woff|woff2|eot)$ {
access_log off;
expires 7d;
}
-
access_log off是关键,不是off拼错成0ff(常见手误) - 正则末尾的
$必须保留,否则可能误杀/static/js/main.js?v=1.2.3这类带查询参数的 URL - phpEnv 默认没开
ngx_http_headers_module,但expires指令只要模块存在就可用——Nginx 1.14+ 都自带,不用额外编译
确认 phpEnv 的 Nginx 日志路径和格式是否生效
phpEnv 的 Nginx 日志默认写在:C:\phpEnv\logs\nginx\access.log。但如果你在 vhost\*.conf 里写了 access_log 指令,它会覆盖全局设置。
检查两点:
- 主配置
C:\phpEnv\nginx\conf\nginx.conf里http块是否有log_format定义(通常有main格式),且access_log行没被注释 - 你的站点
.conf文件里,**不能**在server块顶层再写一遍access_log——否则会和location冲突,导致静态文件日志反而照记
改完后用 phpEnv 界面点「重载 Nginx」,或命令行执行:C:\phpEnv\nginx\nginx.exe -s reload(确保当前目录在 nginx 目录下,否则会报 pid 找不到)。
验证静态文件确实不记日志 + 缓存头是否生效
别只看日志文件大小变化——那是滞后的。立刻 curl 测试:
访问一个图片:curl -I http://localhost/1.png
观察响应头里是否有:Expires: 和 Cache-Control: max-age=...;同时检查 C:\phpEnv\logs\nginx\access.log 最后几行,确认没有新增 1.png 的记录。
- 如果
access.log还有静态文件记录:八成是正则没匹配上(比如你用了.jpg但文件实际是.JPG)——Nginx 默认区分大小写,加i标志:location ~* .*\.(jpg|jpeg|...)$ - 如果缓存头没出现:可能是你站点根目录下有同名
.htaccess或php.ini干扰了 Nginx 处理流程(phpEnv 虽基于 Nginx,但某些 PHP 模块会插手 header) - phpEnv 的「日志查看器」界面有时会缓存旧日志内容,直接用记事本或 VS Code 打开
access.log文件看最新行更可靠
最易被忽略的一点:phpEnv 更新版本时(比如从 8.11 升到 8.12),它会重新生成 vhost\ 下的配置文件,把你手动加的 location 块清空。每次升级后务必重新检查并补上规则——这不是 bug,是 phpEnv 的设计逻辑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











