要使 proxy_cache_valid 200 10m 生效,必须同时满足:① http 块中配置 proxy_cache_path 定义缓存区;② location 中启用 proxy_cache;③ 上游响应允许缓存或配置 proxy_ignore_headers。

直接在 location 或 server 块中写一行 proxy_cache_valid 200 10m;,就能为 200 状态码单独设置缓存有效期——Nginx 会精确匹配该状态码,不依赖后端响应头,也不受 Cache-Control 干扰(前提是没启用相关忽略指令)。
必须同时满足的三个前提
仅写 proxy_cache_valid 不生效。以下三项缺一不可:
-
定义缓存区:在
http块中配置proxy_cache_path,例如:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g; -
启用缓存:在目标
location中添加proxy_cache my_cache; -
上游响应允许缓存:默认情况下,含
Cache-Control: no-cache、private、no-store或Set-Cookie的响应不会被缓存;如需强制缓存,加:proxy_ignore_headers Cache-Control Set-Cookie;
常见合理时长参考
200 是常规成功响应,内容通常稳定,但具体时长要结合业务更新频率:
- 静态页面、图文详情页:可设
proxy_cache_valid 200 1h; - 高频更新的列表页(如新闻首页):建议
proxy_cache_valid 200 5m; - 接口类响应(如用户信息):若数据实时性要求高,用
proxy_cache_valid 200 30s; - 搭配范围请求(206)或协商成功(304)时,常合并设置:
proxy_cache_valid 200 206 304 10m;
注意与其他状态码的配合
200 的规则不会影响其他状态码,但要避免逻辑冲突:
- 不要把 301、302 和 200 写在同一行,因为 301/302 应有独立策略(如
proxy_cache_valid 301 7d;) - 若同时配置了
proxy_cache_valid any 5s;,它只对未显式声明的状态码(如 403、429)生效,不影响 200 - 同级配置中后出现的
proxy_cache_valid 200 ...会覆盖前面的,顺序要清晰











