proxy_ignore_headers 的作用是让 nginx 忽略上游返回的 cache-control、expires、set-cookie、vary 等响应头,使其缓存决策仅依赖 proxy_cache_valid 等本地规则;它不删除头,仅“视而不见”,须置于启用缓存的 location 块中 proxy_pass 之前,并配合 proxy_cache、proxy_cache_valid 等指令才能生效。

proxy_ignore_headers 的作用不是直接控制缓存行为,而是决定 Nginx 是否忽略上游服务器返回的特定响应头 —— 这些响应头原本会影响缓存策略(比如 Cache-Control、Expires、Set-Cookie 等)。是否忽略它们,间接决定了 Nginx 缓存模块(如 proxy_cache)能否按预期生效。
哪些响应头会被它影响
该指令接受一组标准 HTTP 响应头名称,常见包括:
-
Cache-Control:控制缓存时效和可缓存性(如no-cache、no-store、max-age=60) -
Expires:指定绝对过期时间 -
Set-Cookie:默认情况下,只要响应含此头,Nginx 就不会缓存该响应(即使其他条件满足) -
Vary:影响缓存键的构成,忽略后可能导致不同用户拿到错误内容
为什么有时需要忽略它们
典型场景是上游服务(如后端 API 或旧系统)返回了过于保守或不准确的缓存控制头,但你作为反向代理方更清楚内容实际可缓存。例如:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 后端固定返回
Cache-Control: no-cache,但你知道该接口数据每 5 分钟才更新一次 - 静态资源接口误带
Set-Cookie(如因调试中间件),导致本该缓存的 JS/CSS 文件全部绕过缓存 - 后端
Vary: User-Agent导致缓存碎片化严重,而你确认内容对所有 UA 都一致
正确配置方式
该指令必须放在 location 或 server 块中,且仅对 proxy_pass 生效。示例:
location /api/ {
proxy_pass https://backend;
proxy_cache my_cache;
proxy_cache_valid 200 5m;
proxy_ignore_headers Cache-Control Expires Set-Cookie;
}
注意:proxy_ignore_headers 不会删除响应头本身,只是让 Nginx 缓存模块“视而不见”。客户端仍会收到这些头。
配合其他指令才能真正生效
单独使用 proxy_ignore_headers 并不能启用缓存,还需确保:
- 已启用
proxy_cache并配置了缓存区(proxy_cache_path) - 设置了
proxy_cache_valid明确指定状态码对应的缓存时间 - 未被
proxy_cache_bypass或proxy_no_cache绕过 - 响应状态码在默认或显式配置的可缓存范围内(如 200、201、301、302)










