当前位置:首页 > AI技术 > 正文内容

利用Map模块实现基于Cookie的灰度分流深度解析|Duuu笔记

admin6天前AI技术14

Nginx 的 map 模块是实现基于 Cookie 灰度发布的轻量原生方案,支持正则匹配与变量映射,需定义在 http 块中,按顺序首匹配生效,可结合 IP 与 Cookie 实现双重灰度控制。

想用 Nginx 实现基于 Cookie 的灰度发布?Map 模块是轻量、高效又原生的方案——无需额外插件,不依赖 Lua,纯配置即可完成用户维度的流量打标与路由分流。

为什么选 map 而不是 if 或 rewrite?

if 在 location 中有诸多限制(比如不能嵌套、部分变量不可用),rewrite 容易引发循环重写或语义不清;而 map 是 Nginx 的变量映射机制,声明式、无副作用、支持正则匹配,且在请求处理早期就完成变量赋值,适合做灰度标识提取。

关键点:

map 必须定义在 http 块中,不能放在 server 或 location 里

匹配逻辑是“从上到下、首个匹配即停止”,顺序很重要

支持 ~(区分大小写正则)、~*(忽略大小写正则)、=(精确匹配)

默认值用 default 指定,未匹配时生效

提取灰度 Cookie 并映射为 upstream 标识

假设业务约定:前端在用户登录后写入 Cookie

gray_user=on

gray_user=ab-test-v2

,需将该值映射为后端分组名(如 backend_v1 / backend_v2)。

示例配置:

http {

# 定义灰度标识映射关系

map $cookie_gray_user $backend_group {

default "backend_v1";

"on" "backend_v2";

"ab-test-v2" "backend_v2";

~*^v2 "backend_v2";

~*^canary "backend_v2";

}

upstream backend_v1 {

server 10.0.1.10:8080;

}

upstream backend_v2 {

server 10.0.1.11:8080;

}

server {

listen 80;

location / {

proxy_pass http://$backend_group;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

}

}

}

自由画布

百度文库和百度网盘联合开发的AI创作工具类智能体

下载

说明:

$cookie_gray_user

是 Nginx 内置变量,自动提取名为 gray_user 的 Cookie 值

正则

~*^v2

可匹配 v2、V2、v2-beta 等,增强灰度策略灵活性

变量

$backend_group

可直接用于 proxy_pass,Nginx 会动态解析对应 upstream

进阶:结合 IP + Cookie 做双重灰度控制

有时需要“内部员工强制走新版本 + 普通用户按 Cookie 白名单分流”。可在 map 中叠加条件,利用 Nginx 的变量拼接能力:

map "$cookie_gray_user:$remote_addr" $backend_group {

default "backend_v1";

"~*on:.+" "backend_v2"; # Cookie=on → 全部走 v2

"~*ab-test-v2:.+" "backend_v2";

"~*:.+192\.168\.10\.[0-9]+" "backend_v2"; # 匹配内网 IP 段

"~*canary:.+" "backend_v2";

}

注意:

map 的 key 支持字符串拼接

,这里用冒号分隔两个变量,再用正则统一匹配。这样既保留 Cookie 控制,又赋予 IP 层兜底能力。

验证与调试技巧

上线前务必验证映射是否生效:

加临时响应头:

add_header X-Backend-Group $backend_group;

,用 curl 查看返回头

开启 Nginx debug 日志(编译时需含 --with-debug),或使用

error_log /var/log/nginx/debug.log debug;

nginx -t

检查语法,

nginx -s reload

平滑重载

测试时清除浏览器 Cookie 或用 curl 指定 Cookie:

curl -H "Cookie: gray_user=ab-test-v2" http://your-domain/

相关文章

LLM介绍

。LLM 被证明在使用指令形式化描述的未见过的任务上表现良好。这意味着 LLM 能够根据任务指令执行任务,而无需事先见过具体示例,展示了其强大的泛化能力。 :小型语言模型通常难以解决涉...

推荐10个AI人工智能技术网站

除了研究和开发人工智能技术,OpenAI还积极参与人工智能伦理和安全的研究和探讨。 认为,人工智能技术的发展必须遵循伦理和法律的规范,以确保人工智能的应用不会对人类带来负面影响。...

一文讲清神经网络、BP神经网络、深度学习的关系

人工神经网络中的顶级代表。往往说《神经网络》就是指《BP神经网络》。 大家研究着各种神经网络,研究得不亦乐乎, 来了两个家伙Romelhart 和Mcclelland,...

前端开发高级应用:MuleRun如何连接Slack通知 MuleRun消息推送集成配置步骤实战案例|Duuu笔记

若MuleRun无法向Slack推送通知,需依次配置Incoming Webhook或Bot Token、在MuleRun中设置对应通知目标参数,并通过最小化任务测试验证;常见失败原因包括凭据错误、权...

几种主要的神经网络

卷积神经网络的输入为二维的像素整阵列,输出为这个图片的属性,当网络训练学习后,所输入的图片或许经过稍微的变换,但卷积神经网络还是可以通过识别图片局部的特征而将整个图片识别出来。 :该层...

深入理解优化:如何利用 Gemini 3.1 的阶梯计费策略?企业级大规模调用实务完全指南|Duuu笔记

需深入理解Gemini 3.1阶梯计费与调用联动关系,通过识别阶梯区间、请求级Token预估截断、多模型路由调度、响应缓存去重、项目拆分配额绑定五种路径优化成本。 ☞☞☞AI 智能聊天, 问答助手,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。