macos下nginx代理缓存命中状态x-cache-status

在 macOS 下使用 Nginx 做反向代理时,想确认缓存是否生效,最直接的方式就是通过响应头中的 X-Cache-Status 字段来判断。这个字段不是 Nginx 默认自带的,需要手动配置添加。

启用并设置 X-Cache-Status 响应头

Nginx 本身不自动输出缓存状态,需结合 proxy_cache 指令与 add_header 手动注入。关键点是:该 header 必须在 location 块中设置,且不能放在 if 或条件块内(Nginx 会忽略);同时要确保缓存区已正确定义。

在 http 块中定义缓存区,例如:proxy_cache_path /usr/local/var/nginx/cache levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m use_temp_path=off; 在 location 中启用缓存并添加响应头:proxy_cache mycache;<br>proxy_cache_valid 200 302 10m;<br>proxy_cache_valid 404 1m;<br>add_header X-Cache-Status $upstream_cache_status; $upstream_cache_status 是内置变量,取值通常为 HIT、MIS、BYPASS、EXPIRED、STALE 等

常见状态值含义

X-Cache-Status 的值反映本次请求在缓存层的实际处理结果:

HIT:命中缓存,直接返回缓存内容,不转发给上游 MIS:未命中,Nginx 向后端发起请求,并将响应写入缓存(首次访问或缓存过期后) BYPASS:因配置了 proxy_cache_bypass(如带特定 cookie 或参数),跳过缓存直接请求后端 EXPIRED:缓存存在但已过期,Nginx 仍会返回旧缓存(若启用了 proxy_cache_use_stale),同时异步更新 STALE:返回的是过期缓存,因后端不可用或超时,且配置允许使用过期版本

验证是否生效

配置完成后重启 Nginx(sudo nginx -s reload),然后用 curl 查看响应头:

curl -I http://localhost/your-path

观察输出中是否有 X-Cache-Status: HIT 或类似字段。注意:首次请求通常是 MIS,第二次相同请求才可能为 HIT;若始终是 BYPASS,检查是否误配了 proxy_cache_bypass 或请求携带了禁止缓存的头(如 Cache-Control: no-cache)。

macOS 特别注意事项

macOS 上常用 Homebrew 安装 Nginx,默认配置路径为 /usr/local/etc/nginx/nginx.conf。缓存路径建议设在本地磁盘(如 /usr/local/var/nginx/cache),避免用 iCloud 同步目录或 APFS 加密卷导致权限/性能问题。另外,macOS 的 Spotlight 可能索引缓存文件,可在「访达」中右键缓存目录 →「显示简介」→ 勾选「隐藏」并添加到 Spotlight 隐私列表中。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。