最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 性能优化:配置 proxy_no_cache 实现动态跳过特定请求缓存
时间:2026-06-18 09:12:53 编辑:袖梨 来源:一聚教程网
要真正实现动态跳过缓存,必须同时配置 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、参数等特征转为布尔变量,解耦判断逻辑与主配置:
- 按 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 处理,避免混入个性化规则
相关文章
- 绝区零维琳娜技能解析 06-18
- 哥特王朝重制版斯卡尔之剑获得方法 06-18
- 哥特王朝重制版营地全介绍 06-18
- Anthropic稳定性说明:API响应时间与故障记录 06-18
- 哥特王朝重制版旧营地加入方式 06-18
- 哥特王朝重制版等级速升指南 06-18