proxy_cache_bypass 本身不刷新缓存,需配合 proxy_cache、正确 bypass 变量(如 $http_x_dev_refresh)和 proxy_cache_valid 等三条件才能实现动态刷新;还须用 proxy_no_cache 防止敏感响应入库,并通过内网 ip 或 map 白名单限制触发权限。

直接用 proxy_cache_bypass 无法“刷新”缓存快照,它只让单次请求跳过缓存、直连后端。但配合缓存策略,可实现开发人员带特定请求头(如 X-Dev-Refresh)触发一次回源,并自动用新响应更新边缘节点缓存——这才是生产中真正可用的“动态刷新”。
核心配置必须同时满足三个条件
缺一不可,否则请求头无效:
-
同一 location 中启用缓存:必须有
proxy_cache mycache(名称需与proxy_cache_path的keys_zone一致) -
正确声明 bypass 变量:客户端发
X-Dev-Refresh: 1,Nginx 内部对应$http_x_dev_refresh(全小写,短横变下划线) -
允许新响应写入缓存:确保
proxy_cache_valid覆盖目标状态码,且不被后端Cache-Control拦截(必要时加proxy_ignore_headers Cache-Control Expires)
推荐的安全触发方式
避免任意 IP 都能绕过,建议组合判断:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 只认内网或运维出口 IP:
proxy_cache_bypass $http_x_dev_refresh $remote_addr ~^(10\.10\.|172\.16\.); - 或用 map 做白名单校验:
map $http_x_dev_refresh $dev_bypass {
"true" 1;
"debug" 1;
default 0;
}
proxy_cache_bypass $dev_bypass;
防止敏感响应污染缓存
开发请求常带身份信息(如 Token),若响应被缓存,可能泄露数据。务必加 proxy_no_cache 同步控制:
-
proxy_no_cache $http_x_dev_refresh;—— 带头请求的响应不入库 - 或更严谨:
proxy_no_cache $dev_bypass;(与 bypass 使用同一变量)
上线前必须验证是否生效
不能只看配置,要实测:
- 发起请求:
curl -H "X-Dev-Refresh: true" https://example.com/api/data - 检查响应头:
X-Cache应为MISS或无此头,绝不能出现HIT - 查 Nginx 日志:
$upstream_cache_status字段应显示BYP或MISS










