proxy_cache_valid 不控制 CDN 缓存时长,仅决定 Nginx 本地缓存时间;CDN 缓存由响应头中 Cache-Control 或 Expires 决定,需通过 add_header 设置 Cache-Control 才能影响 CDN。

在 Nginx 中,proxy_cache_valid 指令本身**不直接控制 CDN 边缘节点的缓存时长**,它只影响 Nginx 本机(即你自己的反向代理层)对上游响应的缓存行为。CDN 边缘节点是否缓存、缓存多久,主要取决于响应头中的 Cache-Control 或 Expires 字段,而不是 Nginx 的 proxy_cache_valid 配置。
proxy_cache_valid 的实际作用范围
该指令仅决定 Nginx 自身缓存区中响应内容的保留时间。例如:
proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
表示:当 Nginx 从上游收到 200 或 302 响应时,它会在本地缓存 10 分钟;404 响应缓存 1 分钟。这不会自动给响应添加任何缓存头,也不会强制 CDN 遵循这个时间。
如何真正影响 CDN 缓存时长
要让 CDN(如 Cloudflare、Akamai、阿里云全站加速等)按预期缓存资源,关键是在 Nginx 返回给客户端(即 CDN 回源请求)的响应中,正确设置标准 HTTP 缓存响应头:
-
添加
Cache-Control:这是最推荐的方式,例如:add_header Cache-Control "public, max-age=3600";
表示该响应可被 CDN 和浏览器缓存 1 小时。 -
慎用
Expires:需配合add_header Expires,但优先级低于Cache-Control,且依赖服务器时间准确性,不建议单独使用。 -
避免冲突头:确保没有
Cache-Control: no-cache、no-store或private等禁止缓存的指令覆盖你的设置。
与 proxy_cache_valid 协同工作的典型配置
合理搭配两者,能兼顾 Nginx 本机性能和 CDN 行为:
- Nginx 本地缓存设短些(如 5–30 分钟),降低回源压力;
- 同时通过
add_header给 CDN 设置更长的max-age(如 1 小时或 1 天),让边缘节点长期复用; - 若上游响应已自带合适的
Cache-Control,可省略add_header,但需确认其值符合 CDN 策略(部分 CDN 默认忽略private或过短的max-age)。
验证与调试建议
部署后务必检查实际返回的响应头:
- 用
curl -I https://your-domain.com/path查看 CDN 节点返回的Cache-Control和X-Cache(或类似字段); - 对比直接访问源站 IP 的响应头,确认 Nginx 是否成功注入了缓存头;
- 注意 CDN 可能有自身缓存规则(如默认最小 TTL、忽略动态路径等),需在 CDN 控制台同步检查和调整。










