启用nginx反向代理缓存需四步:一、http块中用proxy_cache_path定义cache_one缓存区;二、location中配置proxy_cache、缓存时效、过期策略等;三、自定义proxy_cache_key及透传头,支持登录绕过;四、添加x-cache-status响应头验证。

只写 proxy_cache cache_one 是不够的,必须配合缓存区域定义、响应策略、键值控制和行为干预,才能真正启用反向代理缓存。
一、先在 http 块定义缓存区
这是硬性前提,proxy_cache_path 必须出现在 http { } 块内,否则 location 中的 proxy_cache 会无效:
- 缓存目录需提前创建,且属主为 Nginx 运行用户(如宝塔默认是
www):mkdir -p /www/server/nginx/proxy_cache && chown www:www /www/server/nginx/proxy_cache - 典型配置(放在
include mime.types;上方):proxy_cache_path /www/server/nginx/proxy_cache levels=1:2 keys_zone=cache_one:10m inactive=30m max_size=1g use_temp_path=off; -
keys_zone名称(如cache_one)必须与后续location中保持一致
二、在 location 中启用并控制缓存行为
找到含 proxy_pass 的 location 块,在其内部添加以下指令:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
proxy_cache cache_one;—— 绑定上一步定义的缓存区 -
proxy_cache_valid 200 301 302 1h;—— 对成功响应缓存 1 小时 -
proxy_cache_valid 404 1m;—— 404 也缓存 1 分钟,防探测攻击 -
proxy_cache_use_stale error timeout updating http_500-504;—— 出错或后台更新中仍可返回旧缓存 -
proxy_cache_lock on;和proxy_cache_lock_timeout 5s;—— 防止缓存失效时大量并发回源 -
proxy_cache_min_uses 2;—— 同一资源至少被请求 2 次才写入缓存,避免冷数据堆积
三、定制缓存键与透传关键头信息
默认缓存键可能不满足业务需求,建议显式设置:
-
proxy_cache_key "$host$request_uri$is_args$args";—— 更稳妥地支持多域名和带参路由 - 确保后端能识别真实客户端:
proxy_set_header Host $host;<br>proxy_set_header X-Real-IP $remote_addr;<br>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 如需对登录用户绕过缓存(例如含
user_tokenCookie),加:proxy_cache_bypass $cookie_user_token;<br>proxy_no_cache $cookie_user_token;
四、验证是否生效
可在 location 中加入调试头方便观察:
add_header X-Cache-Status $upstream_cache_status;- 访问时查看响应头:
HIT表示命中缓存,MISS表示未命中,BYPASS表示被跳过










