proxy_no_cache仅控制响应是否写入缓存,需配合proxy_cache_bypass才能真正跳过缓存查找;应通过map提取Cookie、Header、UA等特征生成布尔变量,并在location中同时配置二者实现读写双拦截,default值设0避免误伤,静态资源路径需单独处理。

proxy_no_cache 本身不跳过缓存查找,只决定响应是否写入缓存。要真正防止敏感或个性化数据进缓存,必须配合 proxy_cache_bypass,并用变量精准识别请求特征。
识别带身份标识的请求
用户登录态、角色、设备等信息常藏在 Cookie、Header 或 URL 中,需统一提取为布尔变量:
- 用 map 提取 session ID 是否存在:
map $cookie_sessionid $no_cache_by_login {
~. 1;
default 0;
} - 匹配特定角色头:
map $http_x_user_role $no_cache_by_role {
"admin" 1;
"editor" 1;
default 0;
} - 检测移动端 UA(避免缓存响应错配):
map $http_user_agent $no_cache_by_ua {
~*Mobile 1;
~*iPhone 1;
default 0;
}
组合绕过指令,确保读写双拦截
仅设 proxy_no_cache 无法阻止缓存命中返回旧内容;必须让 proxy_cache_bypass 同时生效:
阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。
- 在 location 块中写入:
proxy_cache_bypass $no_cache_by_login $no_cache_by_role $no_cache_by_ua;
proxy_no_cache $no_cache_by_login $no_cache_by_role $no_cache_by_ua; - 这样只要任一条件满足(如用户带 sessionid 或角色为 admin),Nginx 就会跳过缓存查找,直接回源;且新响应也不会被存入缓存。
避免误伤匿名用户和静态资源
个性化逻辑应默认关闭,只对明确标记的请求启用:
- 所有 map 的 default 值必须是 0,保证未命中规则的请求正常走缓存;
- 不要在全局 http 块中直接写 proxy_no_cache $cookie_sessionid,否则空 cookie 也可能触发非预期行为;
- 对 /static/、/images/ 等路径单独配置 location,跳过上述 map 判断,用 expires 或 proxy_cache_valid 管理即可。
验证是否生效
加响应头快速确认行为:
- add_header X-Cache-Status "$upstream_cache_status"; —— 查看 HIT/MISS/BYPASS;
- add_header X-No-Cache-Reason "$no_cache_by_login|$no_cache_by_role|$no_cache_by_ua"; —— 调试时直观看到哪个变量触发了绕过。

















