要让proxy_cache_valid生效,必须配合proxy_ignore_headers屏蔽Cache-Control、Expires、Set-Cookie、Vary四个干扰头;该指令须置于location块内proxy_pass之前,再显式配置proxy_cache_valid、proxy_cache及proxy_hide_header等,才能强制Nginx自主缓存。

要让 Nginx 的 proxy_cache_valid 生效、真正“忽略后端响应的缓存头”,关键不是靠 proxy_cache_valid 自己,而是必须配合 proxy_ignore_headers 主动屏蔽干扰项。否则,Nginx 默认会优先服从后端返回的 Cache-Control、Expires 等头,直接跳过你写的缓存时间。
必须忽略的四个核心响应头
后端常因框架默认或配置疏忽返回阻碍缓存的头,以下四类最常见、影响最直接:
-
Cache-Control:含
no-cache、no-store、private、max-age=0时,Nginx 默认拒缓存 -
Expires:设为过去时间(如
1970-01-01)会立即否决缓存,哪怕内容完全静态 - Set-Cookie:只要存在,Nginx 默认不缓存整条响应——即使只是埋点 Cookie 或匿名 ID
-
Vary:如
Vary: User-Agent或Vary: Cookie,会导致同一 URL 生成多份缓存,大幅降低命中率
配置必须写在 location 块内且紧邻 proxy_pass
这个指令只对当前 location 有效,且位置错就完全失效:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 必须放在
proxy_pass之前,不能写在http或server块顶层 - 多个头名用空格分隔,严格大小写:
proxy_ignore_headers Cache-Control Expires Set-Cookie Vary; - 它不删除响应头本身,只是让 Nginx 缓存模块在判断时“视而不见”
忽略之后必须显式定义缓存规则
proxy_ignore_headers 只是“松绑”,不是“自动缓存”。你得明确告诉 Nginx 怎么缓、缓多久:
- 基础缓存:
proxy_cache_valid 200 302 1h;(成功响应统一缓存 1 小时) - 负向缓存:
proxy_cache_valid 404 1m;(避免反复打挂后端) - 错误兜底:
proxy_cache_use_stale error timeout http_500;(出错时仍可返回旧缓存) - 别忘了启用缓存区:
proxy_cache my_cache;(需提前在http块中用proxy_cache_path定义)
防止干扰头透传给客户端
忽略是为了让 Nginx 不受其影响,但原始头仍会发给浏览器或 CDN,可能引发误判:
- 加
proxy_hide_header Set-Cookie;和proxy_hide_header Cache-Control;阻止透传 - 主动注入可信头:
add_header Cache-Control "public, max-age=3600" always; - 若只处理静态资源,还可加
add_header Cache-Control "public, immutable, max-age=31536000" always;

















