proxy_cache_valid any 为未显式配置的状态码设置默认缓存有效期,优先级最低,仅对未匹配其他规则的响应生效,不覆盖 cache-control 或 set-cookie 等默认不缓存逻辑。

使用 proxy_cache_valid any 可以为所有 HTTP 状态码统一设置默认缓存有效期,避免为每个状态码单独配置。
any 参数的作用和优先级
any 是一个通配符,代表任意响应状态码(包括 200、301、404、500 等)。它通常作为兜底规则,放在具体状态码规则之后,用于覆盖未显式声明的状态码。
- 如果同时配置了
proxy_cache_valid 200 302 10m;和proxy_cache_valid any 5m;,那么 200/302 响应走 10 分钟,其余所有响应(如 404、503)都按 5 分钟缓存 -
any不会覆盖已明确指定的状态码规则,只生效于未被其他proxy_cache_valid行匹配的响应 - 它不改变缓存是否生成的逻辑,只影响已缓存内容的“有效时长”
典型配置写法
在 http 或 location 块中添加:
proxy_cache_valid 200 301 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 5m;
注意顺序:建议把具体状态码放前面,any 放最后,否则可能被提前匹配而失效。
配合 inactive 实现双重清理机制
proxy_cache_valid 控制“内容过期时间”,而 inactive(在 proxy_cache_path 中定义)控制“不被访问时的自动淘汰时间”。两者独立生效:
- 一个 404 页面被缓存,
proxy_cache_valid 404 1m表示 1 分钟后它在语义上过期;但如果inactive=30m,且这 1 分钟内没人再请求它,它会在 30 分钟无访问后才被真正删除 - 若该 404 页面在过期后又被访问了一次,Nginx 会向后端重新验证(除非配置了
proxy_cache_use_stale),并重置其inactive计时器
常见误区提醒
以下行为不会被 any 覆盖:
- 源站返回
Cache-Control: no-cache或no-store头 —— 默认情况下 Nginx 尊重这些头,需显式用proxy_ignore_headers Cache-Control才能强制缓存 - 响应含
Set-Cookie头 —— Nginx 默认不缓存带该头的响应,需加proxy_ignore_headers Set-Cookie并谨慎评估业务影响 - 非 GET/HEAD 请求 —— 默认不缓存 POST 等方法,需通过
proxy_cache_methods GET HEAD POST显式开启











