nginx 单独记录静态资源访问日志需三步:定义精简日志格式、用 location 正则精准匹配 .js/.css/图片等后缀、配置独立日志文件及 logrotate 轮转;避免污染主日志,便于分析归档。

要让 Nginx 单独记录静态资源(如 .js、.css、图片、字体等)的访问日志,关键在于三步:定义精简日志格式、用 location 精准匹配静态路径、指定独立日志文件。这样既能避免污染主日志,又便于后续分析或归档。
定义专用日志格式
在 http 块中添加一个专用于静态资源的日志格式,去掉冗余字段,保留核心信息:
log_format static '$remote_addr|$time_local|$request|$status|$body_bytes_sent|$http_referer|$http_user_agent|$request_time';
-
$remote_addr记录客户端真实 IP(若前端有代理,可换成$http_x_forwarded_for) - 用竖线
|分隔,方便脚本解析 - 省略
$remote_user、$http_cookie等非必要字段,减小日志体积 -
$request_time有助于排查加载慢的资源
匹配静态资源并启用独立日志
在 server 或对应 location 块中,用正则精准捕获常见静态后缀:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot|pdf|xml)$ {
access_log /var/log/nginx/static_access.log static;
log_not_found off;
}
-
~*表示大小写不敏感,能匹配.JPG、.PNG等变体 -
access_log指向专属路径,并使用上面定义的static格式 -
log_not_found off可屏蔽 404 请求,避免无效记录;如需监控缺失资源,可设为on,再通过$status过滤 - 不要在此 location 中配置
root或alias——静态文件路径应由更上层规则处理,这里只管日志分流
设置日志存储与轮转
静态资源请求频繁,日志增长快,必须配轮转防止磁盘占满:
- 确保目录存在:
mkdir -p /var/log/nginx - 赋予写权限:
chown www-data:www-data /var/log/nginx(按实际运行用户调整) - 新建
/etc/logrotate.d/nginx-static,内容如下:
/var/log/nginx/static_access.log {
daily
missingok
rotate 90
compress
delaycompress
notifempty
create 0644 www-data www-data
}
-
daily每天切割一次 -
rotate 90最多保留 90 天的历史日志 -
compress自动压缩旧日志,节省空间
验证与生效
配置完成后别忘了检查并重载:
- 语法检查:
nginx -t - 重载配置:
nginx -s reload - 触发一次静态资源请求(如访问
/style.css),然后执行tail -1 /var/log/nginx/static_access.log查看是否写入











