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

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

admin4个月前 (04-01)AI技术85

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/

相关文章

神经网络分类总结

从网络性能角度可分为连续型与离散型网络、确定性与随机性网络。 从网络结构角度可为前向网络与反馈网络。 从学习方式角度可分为有导师学习网络和无导师学习网络。 按连续突触性...

神经网络中的单层神经网络

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 看一个经典的神经网络。这是一个包...

什么是人工智能 ?

您可以使用 ML 训练 AI,使其精确、快速地执行任务。这可以通过自动化员工感到吃力或厌烦的业务部分来提高运营效率。同样,您可以使用 AI 自动化来腾出员工资源,用于更复杂和更具创造性的工作。...

几种主要的神经网络

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

AI核心技巧:如何重置openclaw硬件设置 openclaw恢复出厂设置操作方法【操作】深度解析|Duuu笔记

重置 OpenClaw 配置有四种方法:一、交互式向导重置(openclaw onboard --reset);二、指定作用域的命令行重置(如--reset-scope config);三、手动删除~...

前端开发高级应用:Minimax视频生成提示词中文还是英文好实战案例|Duuu笔记

优先使用英文提示词,因其更契合模型训练语料并能稳定触发视觉特征;其次可采用中英混合策略兼顾文化专有名词;纯中文适用于强本土化场景;最终需通过多指标对比验证最优语言形式。 ☞☞☞AI 智能聊天, 问答...

发表评论

访客

看不清,换一张

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