nginx可通过proxy_cache_valid 404配置实现404负向缓存,需配合proxy_cache_path、proxy_cache及proxy_ignore_headers等指令,并满足后端返回标准404且无禁止缓存头等条件。

直接用 proxy_cache_valid 404 就能实现对不存在路径的负向缓存——它不缓存“内容”,而是缓存“这个路径确实不存在”这个结论,让 Nginx 在短时间内直接返回 404,不再转发请求到后端。
明确写死 404 状态码和缓存时间
Nginx 默认只缓存 200、301、302 响应,404 必须显式声明才生效:
- 在
location块中添加类似配置:proxy_cache_valid 404 30s;(推荐 10–60 秒) - 可合并多个状态码:
proxy_cache_valid 404 503 10s; - 避免设为
0s:Nginx 不识别,等同于未配置;也不建议用1s,实际处理延迟会让效果几乎归零
确保缓存机制真正启用
仅写 proxy_cache_valid 404 不够,还需满足三个基础条件:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 全局已定义缓存区,例如在
http块中:proxy_cache_path /var/cache/nginx/levels=1:2 keys_zone=my_cache:10m max_size=1g; - 当前
location中启用了该缓存:proxy_cache my_cache; - 后端响应是标准 HTTP 404(不是 200 + 自定义错误页),且响应头未带
Cache-Control: no-store等强禁止指令
绕过上游缓存头干扰
如果后端总返回 Cache-Control: no-cache 或 max-age=0,Nginx 默认会跳过缓存。此时加一行即可强制执行你的规则:
proxy_ignore_headers Cache-Control Expires;- 注意:仅在你确认后端不会误发这类头时使用,否则可能掩盖真实策略问题
搭配容错机制提升稳定性
单靠短缓存还不够。当 404 高频出现(比如爬虫扫目录),建议补充以下配置:
-
proxy_intercept_errors on;—— 允许 Nginx 拦截 404 并交由自定义逻辑处理 -
error_page 404 = @handle_404;—— 内部重定向到轻量级处理块 -
proxy_cache_use_stale updating http_404;—— 缓存即将过期时,仍可用旧 404 响应,后台悄悄刷新










