proxy_cache_valid 是 nginx 反向代理层控制缓存有效期的核心指令,按状态码定义本地缓存时间,不影响客户端缓存头,需配合 proxy_cache_path 和 proxy_cache 使用,且默认忽略后端 cache-control 等头。

proxy_cache_valid 是 Nginx 反向代理缓存机制中控制缓存响应有效期的核心指令,它不设置客户端看到的 Expires 或 Cache-Control 头,而是决定 Nginx 自身何时重新向后端发起请求——即“代理层缓存的有效期”。
proxy_cache_valid 的作用对象和生效位置
它只影响 Nginx 作为反向代理时在本地磁盘/内存中保存的响应副本,与浏览器缓存无关。
- 后端返回
200、301、404等状态码时,Nginx 是否缓存、缓存多久,由该指令按状态码分别定义; - 它不修改响应头,也不强制客户端缓存行为;若需控制浏览器缓存,需额外配置
add_header Cache-Control或expires。
基本语法与常见写法
proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid 500 502 503 504 30s; proxy_cache_valid any 1m;
- 支持多个状态码并列,后跟时间(
s、m、h、d); -
any表示匹配所有未显式声明的状态码; - 若同一状态码被多次定义,最后一条生效;
- 时间从 Nginx 接收到后端响应那一刻开始计算,不是从用户请求开始。
配合缓存区与 key 的必要前提
proxy_cache_valid 生效的前提是已启用缓存区域:
- 必须定义
proxy_cache_path(指定缓存路径、大小、层级、活跃时间等); - 必须在
location或server块中启用proxy_cache指向该区域; - 建议配合
proxy_cache_key明确缓存键(例如包含$scheme$host$request_uri),避免不同参数混用导致缓存错乱。
示例片段:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
proxy_cache_path /var/cache/nginx/mycache levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location / {
proxy_pass https://backend;
proxy_cache mycache;
proxy_cache_valid 200 301 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
}
}
与后端响应头的优先级关系
Nginx 默认忽略后端返回的 Cache-Control: no-cache 或 Expires,除非开启 proxy_ignore_headers 的反向控制:
- 若希望尊重后端的缓存策略,需显式关闭:
proxy_ignore_headers Cache-Control Expires Set-Cookie;
(注意:
Set-Cookie默认被忽略,因带 Cookie 的响应默认不缓存) - 更推荐做法是统一由 Nginx 控制缓存策略,后端只负责业务逻辑,避免策略分散。
不复杂但容易忽略










