关闭 access_log 是高频静态资源请求下最直接的磁盘减负方式,适用于 favicon.ico、.js/.css、.woff2/.webp 等低价值高频率资源,推荐用 location 精确匹配或正则关闭日志并配合 log_not_found off 和缓存头优化。

在高频静态资源请求场景下,关闭 access_log 是最直接、零依赖的磁盘写入减负方式。这些请求(如 .js、.css、图片、图标)通常已被 CDN 缓存或浏览器强缓存,日志价值极低,却持续触发 write 系统调用和磁盘小写操作,尤其在 SSD 或共享存储上会显著抬高 %util 和 await。
哪些静态路径适合关日志
重点筛选三类低价值但高频率的请求:
- 通用静态文件后缀:/favicon.ico、/robots.txt、/apple-touch-icon.png 等探测类资源
- 前端构建产物:/static/js/app.min.js、/dist/css/main.css、/assets/images/logo.svg
- 字体与媒体资源:.woff、.woff2、.ttf、.webp、.avif 等现代格式文件
推荐配置方式:location 精确匹配 + 正则兜底
避免全局关闭影响调试,采用分层 location 控制更安全:
使用tbot机器ID身份文件配合tsh CLI,通过Teleport访问控制SSH登录托管主机或执行远程命令。
- 对已知固定路径用 location = 精确匹配,性能最优:
location = /favicon.ico { access_log off; log_not_found off; } - 对批量静态资源用大小写不敏感正则匹配:
location ~* \.(ico|png|gif|jpg|jpeg|webp|svg|css|js|woff2?|ttf|eot)$ {
access_log off;
log_not_found off;
expires 1y;
add_header Cache-Control "public, immutable";
} - 若使用 /static/ 或 /assets/ 统一前缀,可优先用前缀匹配提升效率:
location ^~ /static/ { access_log off; log_not_found off; }
配套优化建议
单关 access_log 不够彻底,需同步减少 error_log 干扰:
- 关闭 404 日志刷盘:静态服务常因缺失文件产生大量 404,加 log_not_found off; 可避免 error.log 频繁写入
-
简化日志格式(可选):若仍需部分记录,改用极简格式减少字符串拼接开销:
log_format static '$uri $status $bytes_sent';
access_log /var/log/nginx/static.log static if=$log_static; - 验证是否真正生效:reload 后用 strace -p $(pidof nginx) -e write -s 64 2>&1 | grep access 持续几秒,确认无输出
为什么不用 map?
map 指令虽灵活,但在纯静态资源场景下属于过度设计。它需在 rewrite 阶段早期执行变量计算,引入额外 CPU 开销;而 location 匹配由 Nginx 内核级哈希或 trie 树完成,响应更快、更确定。只有当需按 UA、状态码、响应时间等动态条件采样时,才考虑 map。










