关键在分层控制:一、缓存区须于http块预声明,路径独立、权限正确;二、proxy_pass需显式透传host、x-real-ip等关键头;三、缓存键收敛设计,分级设置proxy_cache_valid并启用cache_lock;四、上线前验证x-cache-status、响应时间及purge能力。

要让 proxy_cache 和 proxy_pass 协同工作,构建稳定、可运维的企业级反向代理缓存,关键不在堆指令,而在分层控制:缓存区定义、请求转发逻辑、缓存策略收敛、行为可观测。下面四点是落地时真正起作用的核心环节。
一、缓存区必须在 http 块预声明,且路径需独立可控
proxy_cache 指令引用的缓存区(如 cache_one)不能临时创建,必须提前在 Nginx 主配置的 http{} 块中用 proxy_cache_path 明确定义:
- 路径建议用专用目录,例如
/www/server/nginx/proxy_cache,避免与日志或临时文件混用 - 必须设置
keys_zone=cache_one:10m—— 这块共享内存存储缓存元数据,10m 可支撑约 8 万条键值,中小规模业务够用 - 加
inactive=30m max_size=1g use_temp_path=off:30 分钟未访问即淘汰,磁盘上限 1GB,禁用临时路径减少 IO - 执行
mkdir -p /www/server/nginx/proxy_cache && chown www:www /www/server/nginx/proxy_cache确保权限正确
二、proxy_pass 转发要干净,头信息需显式透传
proxy_pass 本身只做路径转发,但后端服务依赖真实客户端信息时,必须配合 proxy_set_header 补齐关键头:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
proxy_set_header Host $host:防止后端因 Host 缺失返回 400 或错误路由 -
proxy_set_header X-Real-IP $remote_addr和X-Forwarded-For $proxy_add_x_forwarded_for:保留原始 IP 链路 - 若后端是 HTTPS 服务,加
proxy_set_header X-Forwarded-Proto $scheme,便于后端生成正确跳转链接 - 避免漏掉
proxy_http_version 1.1和proxy_set_header Connection "",防止 HTTP/1.0 连接复用异常
三、缓存策略要收口,不靠默认、不滥用变量
缓存命中率低,往往因为 proxy_cache_key 设计太“宽”或太“窄”。企业场景推荐如下收敛方式:
- 基础键建议用:
proxy_cache_key "$scheme$host$request_uri";—— 排除 Cookie、User-Agent、随机参数干扰 - 如需区分 PC/移动端,用
map提取简标(如$mobile_flag),再拼入键值,而非直接用完整$http_user_agent -
proxy_cache_valid分级设置:200 301 302 1h、404 5m、any 1m;避免用200 1d一刀切 - 启用
proxy_cache_lock on+proxy_cache_lock_timeout 5s,防缓存穿透引发后端雪崩
四、上线前必验三项:状态头、缓存行为、手动清理能力
配置生效后,不能只看页面是否打开,要验证缓存是否真在工作:
- 用
curl -I https://yoursite.com/path查看响应头是否有X-Cache-Status: HIT或MISS - 连续两次请求,对比响应时间与
X-Cache-Status变化,确认缓存写入与复用流程闭环 - 配置 purge 接口(如
location ~ /purge(/.*)),限定内网 IP 可触发清除,用于灰度发布或紧急回滚 - 定期检查
du -sh /www/server/nginx/proxy_cache,确认缓存增长符合预期,无异常膨胀










