404和503应设1–10秒与5–30秒短缓存以防探测雪崩,需显式配置proxy_cache_valid并忽略上游Cache-Control干扰,配合proxy_cache_use_stale提升容错。

对 404 和 503 这类状态码设置极短缓存,核心目标不是“加速访问”,而是防止高频探测或瞬时雪崩——比如爬虫反复刷不存在的路径,或后端故障时大量请求直接打穿。关键在于:缓存时间要足够短以保障响应新鲜度,又不能为零(否则完全不缓存,起不到防刷作用)。
明确缓存意图与合理时长
404 缓存建议设为 1–10 秒:资源真不存在,但短时缓存可缓解恶意扫描;过长会导致真实资源上线后用户仍看到旧 404。 503 缓存建议设为 5–30 秒:表示服务暂时不可用,短缓存既减轻回源压力,又避免用户长时间卡在错误页。 不要设为 0s —— proxy_cache_valid 0 不生效,等效于未配置;也不建议用 1s,Nginx 实际处理有毫秒级延迟,太短几乎无意义。
显式声明状态码,避免默认失效
proxy_cache_valid 默认只匹配 200、301、302,404 和 503 必须手动写进指令里,否则完全不缓存:
- proxy_cache_valid 404 5s;
- proxy_cache_valid 503 10s;
- 可合并写:proxy_cache_valid 404 503 10s;
若 location 块中还配置了其他状态码(如 200),它们互不影响,各自按规则生效。
注意上游响应头的干扰
如果后端返回了 Cache-Control: no-cache 或 max-age=0,Nginx 默认会忽略 proxy_cache_valid 设置。此时需加:
- proxy_ignore_headers Cache-Control Expires;
这条指令让 Nginx “无视”上游的禁用缓存头,强制执行你定义的 404/503 缓存时长。但要注意:仅在你完全信任后端不会误发这类头时启用,否则可能掩盖真实缓存策略问题。
配合 proxy_cache_use_stale 提升容错性
单靠短缓存还不够。当 503 频繁出现时,建议同时启用 stale 机制,让 Nginx 在后端异常时仍能返回“稍旧但可用”的缓存:
- proxy_cache_use_stale error timeout http_503;
- proxy_cache_background_update on;
这样即使缓存已过期,只要后端返回 503,Nginx 就会先返回旧内容,并在后台悄悄刷新——既防刷,又保可用性。











