开发测试环境全量绕过nginx代理缓存需同时配置proxy_cache_bypass 1和proxy_no_cache 1,辅以独立缓存区及忽略后端缓存头,确保请求直连后端、不查不写缓存。

开发和测试环境全量绕过 Nginx 代理缓存,核心目标是:每次请求都直连后端,不查缓存、不写缓存。这不是“禁用缓存功能”,而是通过明确的指令组合,让缓存系统对所有请求彻底失效。
直接关闭缓存读写行为
在对应 location 或 server 块中添加两行关键指令:
-
proxy_cache_bypass 1;→ 强制跳过缓存查找,一律回源 -
proxy_no_cache 1;→ 确保响应绝不写入缓存区
这两条必须同时存在。只写 proxy_no_cache 1 会导致仍可能命中旧缓存并返回(因为查找没跳过);只写 proxy_cache_bypass 1 则新响应仍可能被意外缓存(尤其当其他 location 共享同一 cache zone 时)。
配合缓存区域设置更稳妥
即使绕过,也建议为 dev/test 环境声明独立的、极小的缓存区(或干脆不启用),避免与其他环境共用 zone:
proxy_cache_path /var/cache/nginx/dev levels=1:2 keys_zone=dev_cache:1m max_size=10m inactive=1m;
然后在 location 中显式指定:
proxy_cache dev_cache; proxy_cache_bypass 1; proxy_no_cache 1;
补充建议:移除干扰性缓存控制头
开发测试阶段,后端返回的 Cache-Control 或 Expires 可能引发意外交互。可统一忽略:
proxy_ignore_headers Cache-Control Expires Set-Cookie;
这样即使后端开了缓存头,Nginx 也不会受其影响——绕过逻辑完全由你掌控。
验证是否生效
发起请求后检查响应头:
-
X-Cache-Status(或$upstream_cache_status日志字段)应为BYP - 响应中不应出现
X-Cache: HIT或X-Cache: MISS(除非你主动加了) - 多次请求,后端访问日志应逐次出现,无重复缺失
不复杂但容易忽略











