需分离静态请求、定制含$request_time等字段的日志格式,在location中匹配静态后缀并启用独立access_log,配合logrotate轮转及awk等工具分析性能与流量。

要记录 Nginx 静态资源的访问日志与性能指标,关键在于**分离静态请求、定制日志格式、捕获耗时字段,并确保日志可分析**。不需要改业务逻辑,靠配置就能实现精准归档和基础监控。
定义专用静态日志格式,包含性能字段
在 http 块中添加一个专用于静态资源的日志格式,必须包含响应时间与带宽信息:
-
$request_time:整个请求处理耗时(毫秒级),用于识别慢资源 -
$upstream_response_time:如果静态文件由后端提供(如对象存储代理),该字段才有值;纯本地文件服务时为空 -
$bytes_sent或$body_bytes_sent:实际返回给客户端的字节数,反映真实流量消耗 - 用竖线或空格分隔字段,便于后续用
awk或脚本解析
示例配置:
匹配静态路径并启用独立日志输出
避免把静态请求混在全站日志里,用正则 location 精准拦截常见静态后缀:
- 匹配路径如
/static/、/assets/,或直接按后缀匹配根目录下的资源 - 推荐写法:
location ~* \.(js|css|png|jpg|gif|svg|woff2?|ttf|eot|ico|pdf)$ - 在该 location 块内启用专用日志:
access_log /var/log/nginx/static-access.log static_log; - 加
log_not_found off;可屏蔽 404 文件缺失日志,减少噪音;如需监控缺失资源,保留默认或设为on,再通过$status过滤分析
采集并验证性能指标是否生效
日志写入后,需确认关键字段有值,尤其是 $request_time:
- 手动请求一个 JS 文件,例如
curl -I https://example.com/static/app.js - 查看
/var/log/nginx/static-access.log最新行,确认最后一列是类似0.002、0.015的小数值 - 若始终为
0.000,检查 Nginx 是否以非 daemon 模式运行(开发环境常见),或确认配置已重载:nginx -s reload
配合轮转与轻量分析,让日志真正可用
日志持续写入会撑满磁盘,且原始文本需加工才具价值:
- 用
logrotate每天切分、压缩、保留 30–90 天,防止单文件过大 - 基础分析可直接用命令:
awk -F'|' '{sum += $8} END {print "avg:", sum/NR}' /var/log/nginx/static-access.log(计算平均响应时间) - 统计某类资源总流量:
awk -F'|' '$3 ~ /\.js$/ {bytes += $5} END {print bytes/1024/1024 " MB"}' /var/log/nginx/static-access.log - 需要可视化或高频查询时,可对接
goaccess(生成 HTML 报表)或导出至Loki + Grafana实现时序图表











