最新下载
热门教程
- 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 处理,避免混入个性化规则
相关文章
- 火影忍者格斗称号怎么穿戴 称号的获取和穿戴方法是什么 08-12
- 异环保时捷918获取做法 保时捷918怎么获取 08-12
- 卡厄思梦境蓝壶打法攻略 蓝壶如何打 08-12
- 拼多多先用后付最迟多长时间付款-拼多多先用后付额度在哪看 08-12
- ZLibrary镜像网址,Z-Library入口网站及最新官网(2025更新) 08-12
- 卡厄思梦境友纪阵容搭配推荐 友纪阵容配队哪个最强 08-12