要在 Nginx 中实时监控静态资源缓存命中情况,需配置含 $upstream_cache_status 的 log_format,启用 proxy_cache 并在静态资源 location 中应用该日志格式,再通过 tail、awk 等命令分析日志。

要在 Nginx 中实时监控静态资源的缓存命中情况,关键在于正确配置 log_format 并在日志中输出 $upstream_cache_status 变量。这个变量会显示请求在 proxy_cache 或 fastcgi_cache 等缓存层中的状态(如 HIT、MISS、EXPIRED、BYPASS 等),配合合理的日志格式和访问模式,就能快速识别缓存行为。
确认已启用缓存并定义了 cache zone
确保你已在 http 或 server 块中启用了缓存功能,例如:
- 使用
proxy_cache_path定义缓存存储路径和 zone 名称(如static_cache) - 在
location块中用proxy_cache static_cache启用缓存 - 设置
proxy_cache_valid控制不同响应码的缓存时长 - 添加
proxy_cache_use_stale和proxy_cache_lock等增强健壮性(可选)
定义含 $upstream_cache_status 的 log_format
在 http 块中添加自定义日志格式,把缓存状态作为独立字段输出,便于后续分析:
log_format cache_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$upstream_cache_status';
注意:$upstream_cache_status 仅在使用 proxy_pass 且启用了 proxy_cache 时有效;若用 fastcgi_cache,应改用 $fastcgi_cache_status。
将自定义日志格式应用到 server 或 location
在对应服务块中指定 access_log 使用新格式,并建议单独为静态资源 location 设置日志文件,避免干扰主日志:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
proxy_pass http://backend;
proxy_cache static_cache;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 404 1m;
access_log /var/log/nginx/static_cache.log cache_log;
}这样所有匹配静态资源的请求都会记录缓存状态到 static_cache.log,方便聚焦分析。
实时观察与简单分析
使用命令行工具快速查看缓存效果:
-
tail -f /var/log/nginx/static_cache.log | grep HIT:实时筛选命中的请求 -
awk '{print $12}' /var/log/nginx/static_cache.log | sort | uniq -c | sort -nr:统计各缓存状态出现次数(第12列是$upstream_cache_status,具体位置依 log_format 字段顺序而定) - 搭配
grep -v "HIT"快速定位未命中原因(如MISS可能因首次请求或缓存未生成,EXPIRED表示过期后回源,BYPASS则说明被proxy_cache_bypass规则跳过)
不复杂但容易忽略的是:确保 Nginx 版本 ≥ 1.7.0($upstream_cache_status 自此版本稳定支持),且 reload 配置后需有真实请求触发缓存流程,变量值才会非空。


















