要真正实现动态跳过缓存,必须同时配置 proxy_cache_bypass 和 proxy_no_cache 并共用同一变量(如 $skip_cache),前者跳过缓存读取,后者阻止响应写入缓存;需用 map 指令将路径、请求头、cookie、参数等映射为布尔变量,并在 location 中统一启用双指令,任一变量为非空或非零即生效。

proxy_no_cache 本身不跳过缓存读取,只控制响应是否写入缓存。要真正实现“动态跳过特定请求缓存”,必须配合 proxy_cache_bypass,并用变量驱动判断逻辑——不是简单写 proxy_no_cache 1,而是让变量成为缓存策略的开关。
明确两个指令的分工
• proxy_cache_bypass:决定本次请求是否跳过缓存查找,直接回源
• proxy_no_cache:决定本次响应是否写入缓存,避免污染缓存池
二者需使用同一变量(如 $skip_cache),且变量值为非空字符串或非零数值时才触发行为。只配一个,效果不完整。
用 map 提前定义业务规则
把路径、请求头、Cookie、参数等特征转为布尔变量,解耦判断逻辑与主配置:
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
- 按 URL 路径跳过:map $request_uri $skip_cache_by_path { ~*^/admin/ 1; ~*^/api/debug 1; default 0; }
- 按请求头角色跳过:map $http_x_user_role $skip_cache_by_role { "admin" 1; "dev" 1; default 0; }
- 按 Cookie 判断登录态:map $cookie_sessionid $skip_cache_by_login { ~. 1; default 0; }
- 按查询参数触发:map $arg_nocache $skip_cache_by_arg { "1" 1; "true" 1; default 0; }
在 location 中统一启用双绕过
变量定义好后,在具体转发块中同时启用两个指令:
- proxy_cache my_cache;(必须已启用缓存)
- proxy_cache_bypass $skip_cache_by_path $skip_cache_by_role $skip_cache_by_login $skip_cache_by_arg;
- proxy_no_cache $skip_cache_by_path $skip_cache_by_role $skip_cache_by_login $skip_cache_by_arg;
只要任一变量值为 1,整条指令即生效,请求跳过缓存读取,响应也不写入缓存。
验证和避坑要点
• 验证是否生效:用 curl -H "X-User-Role: admin" https://site.com/api/data,检查响应头中无 X-Cache: HIT,且 $upstream_cache_status 为 BYP
• default 值必须设为 0:防止未匹配规则的请求被误跳过
• 不要在 http 块中直接写 proxy_no_cache $cookie_sessionid:空 cookie 可能导致非预期行为
• 静态资源(如 /static/)建议单独 location 处理,避免混入个性化规则










