要让特定业务接口响应不写入缓存,必须配合使用 proxy_cache_bypass 和 proxy_no_cache 并共用同一布尔变量,且需先启用缓存(proxy_cache + proxy_cache_path),再通过 map 指令动态映射路径、参数或请求头生成绕过变量,任一变量为非空即跳读且不存;响应头 x-cache-status: byp 或日志中 $upstream_cache_status 为 byp 表示生效。

要让特定业务接口的响应不写入缓存,关键不是单独用 proxy_no_cache,而是让它和 proxy_cache_bypass 配合,用同一个变量控制“不读也不存”,否则只禁写不跳读,缓存仍可能返回旧内容。
必须先启用缓存并定义缓存区
没有缓存机制,proxy_no_cache 就没作用。需在 http 块中配置:
proxy_cache_path /var/cache/nginx/mycache levels=1:2 keys_zone=my_cache:100m inactive=7d max_size=10g;- 对应 location 中必须有
proxy_cache my_cache;
用 map 指令定义业务识别规则
把真实业务特征映射成布尔变量,避免硬编码判断逻辑。例如:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 按路径:管理接口不缓存 →
map $request_uri $skip_cache_admin { ~*^/admin/ 1; default 0; } - 按参数:调试开关触发 →
map $arg_debug $skip_cache_debug { "1" 1; default 0; } - 按请求头:带内部标识才绕过 →
map $http_x_internal_call $skip_cache_internal { "true" 1; default 0; }
location 中同时启用 bypass 和 no_cache
两个指令必须共用同一组变量,且在同一 location 块内:
proxy_cache_bypass $skip_cache_admin $skip_cache_debug $skip_cache_internal;proxy_no_cache $skip_cache_admin $skip_cache_debug $skip_cache_internal;
只要任一变量值为非空或非零(如 1),本次请求就跳过缓存查找,且响应也不会被保存。
验证是否生效
检查响应头或日志确认策略落地:
- 响应头中出现
X-Cache-Status: BYP表示已跳过缓存 - 日志变量
$upstream_cache_status输出BYP即生效 - 注意:仅靠
add_header Cache-Control "no-store"只影响浏览器,不影响 Nginx 代理层缓存










