如何配置proxy_ignore_headers强制开启特定响应头资源的缓存分发改?
- 内容介绍
- 文章标签
- 相关推荐
本文共计665个文字,预计阅读时间需要3分钟。
为了加强Nginx的缓存效果,避免某些资源被缓存,可以通过以下方式设置:
明确作用范围:只在启用 proxy_cache 的 location 中生效
该指令不会自动触发缓存,它必须与 proxy_cache 和 proxy_cache_valid 配合使用,且只能写在启用了反向代理缓存的 location 块内:
- 确保已定义
proxy_cache_path(在http块中) - 对应
location中必须有proxy_cache my_cache;和匹配状态码的proxy_cache_valid -
proxy_ignore_headers必须放在proxy_pass之前,且在同一location内
精准指定要忽略的响应头字段名
它只识别标准响应头的原始字段名(区分大小写),常见可忽略项包括:
-
Cache-Control:屏蔽
no-cache、private、no-store等指令 - Expires:跳过服务端设定的绝对过期时间
- Set-Cookie:Nginx 默认不缓存含此头的响应;忽略后可强制缓存(仅限内容无用户态的场景)
-
Vary:忽略后,Nginx 不再按
Vary值拆分缓存键,减少缓存碎片
多个头用空格分隔,例如:proxy_ignore_headers Cache-Control Expires Set-Cookie;。不要写成小写或加冒号、逗号。
配合显式缓存策略完成分发控制
忽略上游头后,需由 Nginx 主动定义缓存行为和透传规则:
- 用
proxy_cache_valid 200 302 1h;明确指定哪些状态码缓存多久 - 若面向 CDN 分发,建议关闭 Nginx 本地缓存(不配
proxy_cache),改用add_header Cache-Control "public, max-age=3600" always;直接注入 CDN 可识别的头 - 对静态资源(如
/_next/static/),优先用alias+expires+add_header,避免代理开销
验证是否真正生效
部署后通过 curl -I 检查实际响应头,并确认三点:
- 响应中仍可见被忽略的头(如
Cache-Control: no-cache),说明它未被删除,只是被 Nginx “无视” - 响应中存在你注入的
Cache-Control或Expires(如max-age=3600) - Nginx 日志中的
$upstream_cache_status显示HIT或MISS,而非BYPASS(后者说明被proxy_no_cache或proxy_cache_bypass干扰)
本文共计665个文字,预计阅读时间需要3分钟。
为了加强Nginx的缓存效果,避免某些资源被缓存,可以通过以下方式设置:
明确作用范围:只在启用 proxy_cache 的 location 中生效
该指令不会自动触发缓存,它必须与 proxy_cache 和 proxy_cache_valid 配合使用,且只能写在启用了反向代理缓存的 location 块内:
- 确保已定义
proxy_cache_path(在http块中) - 对应
location中必须有proxy_cache my_cache;和匹配状态码的proxy_cache_valid -
proxy_ignore_headers必须放在proxy_pass之前,且在同一location内
精准指定要忽略的响应头字段名
它只识别标准响应头的原始字段名(区分大小写),常见可忽略项包括:
-
Cache-Control:屏蔽
no-cache、private、no-store等指令 - Expires:跳过服务端设定的绝对过期时间
- Set-Cookie:Nginx 默认不缓存含此头的响应;忽略后可强制缓存(仅限内容无用户态的场景)
-
Vary:忽略后,Nginx 不再按
Vary值拆分缓存键,减少缓存碎片
多个头用空格分隔,例如:proxy_ignore_headers Cache-Control Expires Set-Cookie;。不要写成小写或加冒号、逗号。
配合显式缓存策略完成分发控制
忽略上游头后,需由 Nginx 主动定义缓存行为和透传规则:
- 用
proxy_cache_valid 200 302 1h;明确指定哪些状态码缓存多久 - 若面向 CDN 分发,建议关闭 Nginx 本地缓存(不配
proxy_cache),改用add_header Cache-Control "public, max-age=3600" always;直接注入 CDN 可识别的头 - 对静态资源(如
/_next/static/),优先用alias+expires+add_header,避免代理开销
验证是否真正生效
部署后通过 curl -I 检查实际响应头,并确认三点:
- 响应中仍可见被忽略的头(如
Cache-Control: no-cache),说明它未被删除,只是被 Nginx “无视” - 响应中存在你注入的
Cache-Control或Expires(如max-age=3600) - Nginx 日志中的
$upstream_cache_status显示HIT或MISS,而非BYPASS(后者说明被proxy_no_cache或proxy_cache_bypass干扰)

