使用 proxy_cache_valid 强制设定缓存时间并配合 proxy_ignore_headers cache-control expires,可使 nginx 忽略后端返回的 expires 和 cache-control 头,按指定时长缓存响应。

在 Nginx 中,若想让 proxy_cache 忽略后端返回的 Expires 和 Cache-Control 头(即不按后端指示决定缓存是否过期),关键在于主动覆盖缓存决策逻辑,而不是被动遵循响应头。
使用 proxy_cache_valid 强制设定缓存时间
这是最直接有效的方式。只要配置了 proxy_cache_valid,Nginx 就会优先以该指令指定的状态码和时长为准,**忽略后端的 Cache-Control: no-cache、max-age=0 或 Expires 过期时间**(除非显式启用 proxy_cache_use_stale 等特殊行为)。
示例:
proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
这样,所有返回 200/302 的响应,无论后端是否带 Cache-Control: no-store 或 Expires: past,Nginx 都会缓存 10 分钟。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
禁用对 Cache-Control 的自动解析(关键:proxy_ignore_headers)
Nginx 默认会读取并尊重后端响应中的 Cache-Control 和 Expires。要彻底绕过它们,必须显式告知 Nginx 忽略这些头部:
proxy_ignore_headers Cache-Control;proxy_ignore_headers Expires;- 也可合并写为:
proxy_ignore_headers Cache-Control Expires;
⚠️ 注意:仅加 proxy_ignore_headers 不够——它只是“不看这些头”,但如果没有 proxy_cache_valid,Nginx 仍可能按默认策略(如不缓存)处理。二者需配合使用。
避免被 Vary 头干扰缓存键
如果后端返回了 Vary: * 或频繁变动的 Vary(如 Vary: User-Agent),可能导致缓存碎片化甚至不命中。虽然不直接影响“忽略 Expires/CC”,但会影响实际缓存效果:
- 可考虑用
proxy_hide_header Vary;隐藏它(慎用,需确认业务无差异化需求) - 或用
proxy_cache_key显式定义缓存键,避开 Vary 影响,例如:proxy_cache_key "$scheme$request_method$host$request_uri";
验证是否生效的小技巧
配置完成后,可通过以下方式确认 Nginx 是否真正忽略了后端头:
- 用
curl -I请求后端,记下原始Cache-Control和Expires - 再请求 Nginx 代理地址,观察响应中是否有
X-Proxy-Cache: HIT或MISS - 连续多次请求,看是否在你设的
proxy_cache_valid时间内持续命中(即使后端头写着no-cache)










