proxy_cache_bypass失效主因是未被触发:一查缓存上下文是否完整(proxy_cache、proxy_cache_valid缺一不可);二查变量名是否严格为$http_x_refresh且值为"1"/"true"等有效值;三查是否遗漏proxy_no_cache导致绕过后仍写入缓存。

排查 proxy_cache_bypass 条件判断失效,关键不是“它没运行”,而是“它根本没被触发”——通常因为基础配置缺失、变量名写错或值不满足判定规则。下面分三类常见故障点,直接对应检查项和验证方法。
缓存上下文是否完整启用
该指令完全依赖缓存环境,脱离就无效:
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
- 确认所在
location块中明确写了proxy_cache mycache(名称必须与proxy_cache_path中的keys_zone=完全一致) - 必须有
proxy_cache_valid,例如proxy_cache_valid 200 302 5m;没有它,Nginx 不认为该响应可缓存,整个缓存逻辑退化 - 删掉
proxy_cache或把它挪到server块里,proxy_cache_bypass就彻底静默,日志里也不会报错
变量名和值是否严格合规
Nginx 对变量命名和值判断非常严格,常见错误几乎都集中在这儿:
- Header 名
X-Refresh→ 变量名必须是$http_x_refresh(全小写、短横变下划线、固定前缀$http_),写成$http_X_Refresh或$arg_x_refresh都无效 - 值只要展开后是空字符串(Header 缺失)、
"0"或"off"(不区分大小写),就不会触发绕过;"1"、"true"、"T"、"force"都有效 - 用
curl -v -H "X-Refresh: true" /api测试时,同时加add_header X-Cache-Status $upstream_cache_status,响应头出现X-Cache-Status: BYP才算真正生效
是否遗漏 proxy_no_cache 导致误判“已绕过”
很多问题其实不是绕过失败,而是绕过后的响应又被缓存了,后续请求命中的是这个“脏缓存”:
-
proxy_cache_bypass只跳过读缓存,不阻止写入;若后端返回Cache-Control: public,该响应仍可能进缓存 - 务必配对使用:
proxy_no_cache $http_x_refresh(和 bypass 用同一个变量) - 否则管理员带 Token 请求的数据被缓存,普通用户再访问同一路径,可能看到脱敏前的敏感内容










