最有效做法是在匹配静态请求的 location 块中直接写 access_log off;;常用方式包括正则匹配后缀(如 js/css 等)、前缀匹配静态目录(如 /static/)、精确匹配干扰路径(如 /favicon.ico);修改后需语法检查、重载并验证日志是否停止写入。

直接在匹配静态请求的 location 块中写 access_log off;,是最有效、最推荐的做法。它从源头跳过日志写入流程,不占磁盘 I/O,也不消耗 CPU 做日志格式化。
用正则匹配后缀并关闭日志
这是最常用、最直观的方式,适合分散在各路径下的静态文件(如 /js/app.js、/css/main.css):
- 使用
location ~* \.(js|css|png|jpg|gif|ico|woff2?|ttf|eot|svg|webp)$进行大小写不敏感匹配 - 确保该
location块写在location /或proxy_pass规则之前,避免被兜底规则覆盖 - 块内必须显式写
access_log off;,否则会继承上级(如server块)的日志配置 - 可顺带加缓存头:
expires 1y;和add_header Cache-Control "public, immutable";
用前缀匹配静态目录并关闭日志
如果静态资源统一放在固定路径下(如 /static/、/assets/),用前缀匹配更高效、更安全:
使用tbot机器ID身份文件配合tsh CLI,通过Teleport访问控制SSH登录托管主机或执行远程命令。
- 写法示例:
location ^~ /static/ { access_log off; alias /var/www/myapp/static/; } -
^~表示前缀匹配且优先于正则,避免因顺序导致匹配失效 - 注意
alias与root的路径拼接差异,确保文件能正确返回,否则可能触发 404 并写入error_log - 同样需放在通用
location /之前
精准排除干扰路径
有些请求虽小但高频,且无分析价值,建议单独处理:
location = /favicon.ico { access_log off; log_not_found off; return 204; }location = /robots.txt { access_log off; log_not_found off; }- 健康检查路径如
/healthz、/ping也建议用location =精确匹配并关日志
验证是否真正生效
改完配置不能只靠 reload 就算完,要确认日志确实不写了:
- 执行
nginx -t检查语法,再nginx -s reload - 发一次测试请求:
curl -I https://your.site/app.js - 观察
tail -f /var/log/nginx/access.log是否无新增行 - 检查 worker 进程是否还持有日志句柄:
lsof -p $(pidof nginx) | grep access,应无输出










