一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中静态资源服务怎样管理访问日志记录

时间:2026-07-03 09:54:46 编辑:袖梨 来源:一聚教程网

静态资源日志应按需分流或关闭:高频低价值请求(如.js、.css、图片)宜禁用主日志,可用location匹配后缀+access_log off;需分析时可单独记录并精简格式;复杂路径推荐map变量控制;robots.txt等干扰请求应显式关闭日志。

静态资源访问日志不需要全量记录,核心是按需分流或关闭:高频但低业务价值的请求(如 .js、.css、图片)应避免写入主日志,既节省磁盘又提升分析效率。

直接关闭静态资源日志

最轻量的做法是在 location 块中匹配常见后缀,用 access_log off 彻底跳过记录:

  • 在 server 或 http 块中添加如下配置:

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg|pdf)$ {
  expires 1y;
  add_header Cache-Control "public, immutable";
  access_log off;
}

  • ~* 表示大小写不敏感,能覆盖 JPG、PNG 等变体
  • 不能在 if 块里写 access_log off —— Nginx 不支持该语法
  • 此方式适用于纯托管静态文件、无需归档分析的场景

为静态资源单独记录日志

若需保留日志用于 CDN 回源分析、缓存命中率统计或故障回溯,建议分离存储并精简格式:

  • 先在 http 块定义专用格式,例如:

log_format static '$time_local|$remote_addr|$request|$status|$body_bytes_sent|$http_referer|$request_time';

  • 再在对应 location 中启用:

location ~* .(js|css|png|jpg|woff2?)$ {
  access_log /var/log/nginx/static_access.log static;
  log_not_found off;
}

  • log_not_found off 可防止 404 静态请求刷屏日志
  • 竖线分隔便于后续用 awk 或脚本解析
  • 独立路径方便配合 logrotate 按日轮转、压缩归档

用 map 实现更灵活的控制

当静态资源路径不规则(如带版本号的 /assets/v2.1.0/main.js)或需结合 URI 路径、查询参数判断时,map 更可靠:

  • 在 http 块中定义映射变量:

map $uri $log_static {
  ~*.(js|css|png|jpg|gif|woff2?)$ 0;
  ~*/static/ 0;
  ~*/api/ 1;
  default 1;
}

  • 然后在 server 块中按变量值开关日志:

access_log /var/log/nginx/access.log main if=$log_static;

  • 这样只有 $log_static 为 1 的请求才记入主日志
  • 比单纯后缀匹配更适应复杂路由结构

补充建议:排除干扰请求

有些请求虽带静态后缀,但不属于真实资源访问,应主动跳过:

  • robots.txt、favicon.ico、健康检查路径(如 /healthz)可单独配置 access_log off
  • 示例:
    location = /robots.txt { access_log off; log_not_found off; return 200 "User-agent: *nDisallow: /n"; }
  • 避免这些高频低信息量请求污染日志或干扰统计

热门栏目