为静态资源做流量统计监控,关键是从nginx配置层实现请求识别、日志分离与结构化输出:通过location精准剥离静态请求,关闭无关路径日志,定义精简专用日志格式,结合实时采集与轻量聚合实现秒级洞察,并可选补充缓存命中率监控。

要为静态资源做流量统计监控,关键不是堆工具,而是从 Nginx 配置层就做好请求识别、日志分离和结构化输出——这样后续分析才轻量、准确、可扩展。
用 location 精准剥离静态请求
所有统计的前提是把静态请求从混合日志中“拎出来”。不能依赖后端过滤,必须在入口就隔离:
- 匹配常见静态后缀(js/css/png/jpg/svg/woff2 等),或统一前缀(如 /static/、/img/)
- 确保该 location 在 proxy_pass 或通用 / 规则之前,避免被覆盖
- 对 robots.txt、favicon.ico、健康检查路径显式关闭日志:
access_log off;,防止干扰真实访问数据
定义专用日志格式,只留核心字段
静态请求量大,日志越精简,后续解析越快。推荐自定义 format,聚焦以下维度:
-
$status:客户端收到的状态码(200/304/404/500 等) -
$upstream_status(若走代理):后端真实返回码,用于判断 CDN 或对象存储是否异常 -
$request_uri和$request_filename:便于区分重写路径与实际文件,验证是否真命中磁盘 -
$http_referer和$http_user_agent:来源与客户端类型,支持归因分析 - 去掉
$http_x_forwarded_for等非必需字段;如需区分 CDN 回源,可加$upstream_addr
实时采集 + 轻量聚合,不依赖重架构
中小规模无需引入 Kafka 或 ELK,用简单脚本就能实现秒级洞察:
- 用
tail -f实时读取独立静态日志文件 - 配合 sed 或 Python 清洗 URI:去参数、标准化路径(
/static/v2.1/app.js → /static/app.js)、转小写 - 每 5 秒滚动计算 PV、UV(按 IP 或 UA Hash)、错误率(4xx+5xx 占比)、Referer 主域名 Top5
- 结果通过 SSE 推送到前端面板,或写入 Redis Sorted Set 供查询
补充缓存命中率监控(可选但实用)
如果静态资源走的是 proxy_cache(而非 root/alias 直接服务),可同步监控缓存效果:
- 在静态 location 中启用
proxy_cache并记录$upstream_cache_status - 新增日志字段,例如:
$upstream_cache_status $request_time $upstream_response_time - 用 awk 统计 HIT/MISS/EXPIRED 等状态占比,公式为:
HIT / (HIT + MISS + EXPIRED + STALE + UPDATING + BYPASS)











