Nginx可通过add_header X-Cache-Status $upstream_cache_status always;直接输出缓存状态,依赖原生变量$upstream_cache_status,无需额外模块;需先配置proxy_cache_path、proxy_cache等缓存指令,并确保proxy_cache_key一致、无bypass规则干扰。

在 Nginx 中,通过 add_header 直观输出缓存状态(HIT / MISS / EXPIRED / BYPASS 等),是排查全站缓存行为最轻量、最直接的方式。关键在于:Nginx 原生变量 $upstream_cache_status 已提供缓存结果标识,只需将其透传到响应头即可,无需额外模块或日志解析。
确认缓存配置已启用并生效
确保你已在 http 或 server 块中正确配置了缓存区和代理缓存策略,例如:
- 定义缓存区:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; - 启用缓存:
proxy_cache my_cache; - 设置缓存键与过期规则:
proxy_cache_key "$scheme$request_method$host$request_uri";和proxy_cache_valid 200 302 10m; - 转发请求时保留关键头(如
Cache-Control)以支持条件缓存逻辑
用 add\_header 输出缓存状态头
在 location 块或 server 块中添加如下指令:
其中 always 参数确保即使返回 304、4xx、5xx 等非 200 响应也会携带该头,便于完整观测。常见值含义:
- HIT:命中本地缓存,直接返回
- MISS:未命中,回源拉取并写入缓存
-
EXPIRED:缓存存在但已过期,回源验证(若支持
proxy_cache_revalidate)或刷新 -
BYPASS:因
proxy_cache_bypass规则跳过缓存(如带特定 Cookie 或参数) -
STALE:缓存过期但仍在使用(配合
proxy_cache_use_stale)
浏览器与开发者工具中快速验证
打开 Chrome/Firefox 开发者工具 → Network 标签页 → 刷新页面 → 点击任意资源 → 查看 Response Headers:
- 看到
X-Cache-Status: HIT表示缓存生效 - 连续刷新时由
MISS变为HIT,说明缓存写入成功 - 若始终为
MISS,需检查proxy_cache_key是否一致、请求头是否触发 bypass、后端是否返回禁止缓存的Cache-Control: no-store等
进阶:按状态差异化标记或记录
可结合 map 指令增强可读性,例如:
HIT "HIT from nginx";
MISS "MISS, fetched from upstream";
default "OTHER: $upstream_cache_status";
}
add_header X-Cache $cache_info always;
这样响应头变为更友好的 X-Cache: HIT from nginx,适合团队协作或前端调试。注意 map 必须定义在 http 块内,且不能放在 server 中。










