温馨提示×

nginx缓存日志怎么看

小樊
43
2026-09-02 14:23:05
栏目: 编程语言

Nginx 本身不会直接记录“缓存命中/未命中”到普通 access log,需要你在配置里显式记录缓存状态,然后看日志才行。

下面按常见场景说明。


一、先确认:你用的是哪种“缓存”

1️⃣ 反向代理缓存(proxy_cache)

最常见的 Nginx 缓存方式。

2️⃣ 静态文件缓存(浏览器 / CDN)

Nginx 只发 Cache-ControlExpires不缓存内容,日志里看不到命中。


二、proxy_cache 缓存日志怎么看(重点)

1️⃣ 在 nginx.conf 中定义日志格式

log_format cache_log '$remote_addr - $upstream_cache_status [$time_local] '
                     '"$request" $status $body_bytes_sent '
                     '"$http_referer" "$http_user_agent"';

关键变量:

  • $upstream_cache_status

2️⃣ 在 server / location 中使用该日志

access_log /var/log/nginx/cache_access.log cache_log;

3️⃣ 看日志里的 upstream_cache_status

示例日志:

192.168.1.10 - HIT [10/Oct/2024:12:00:01 +0800] "GET /api/user HTTP/1.1" 200 1234
192.168.1.11 - MISS [10/Oct/2024:12:00:02 +0800] "GET /api/user HTTP/1.1" 200 1234
192.168.1.12 - EXPIRED [10/Oct/2024:12:00:03 +0800] "GET /api/user HTTP/1.1" 200 1234

4️⃣ upstream_cache_status 含义

状态 含义
HIT 缓存命中
MISS 未命中,回源
EXPIRED 缓存过期,回源更新
BYPASS 强制不走缓存
STALE 用旧缓存(源站错误)
UPDATING 正在更新缓存
REVALIDATED 重新验证成功

看缓存是否生效,核心就是看 HIT 多不多


三、常见错误(很多人踩坑)

❌ 没加 $upstream_cache_status

默认 combined 日志是看不到缓存状态的。

❌ 缓存根本没生效

可能原因:

  • proxy_cache 没开
  • proxy_cache_valid 没配
  • 请求带 Cache-Control: no-cache
  • 方法是 POST

四、快速排查是否真的有缓存

curl -I https://yourdomain.com/api/test

看响应头:

X-Cache: HIT

(如果你配置了 add_header X-Cache $upstream_cache_status


五、可选:在响应头里直接看

add_header X-Cache $upstream_cache_status;

浏览器开发者工具 → Network → Response Headers 直接看。


六、总结一句话

Nginx 缓存日志 = 配置 log_format + $upstream_cache_status + 看 HIT / MISS

如果你愿意,可以把你的 nginx.conf 相关配置贴出来,我可以直接帮你判断缓存有没有配对。

0