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

开发Nginx网关利Map模块现基于Cookie的灰分流|Duuu笔记

admin2周前 (04-05)AI技术17

深入理解前端原理,本文探讨

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?看这一篇就够了!

一、全套AGI大模型学习路线 AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能! 二、640套AI大模型报告合集 这套包含640份报告的合集,涵盖了AI大...

使用 ESP

针对该分类问题,我们使用了 Kaggle 手势识别数据集 中的一个开源数据集。原始数据集包括 10 个类别,我们只使用了其中 6 个。这些类别更容易识别,且日常生活中更有用,如...

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

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

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

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

跨平台机器学习:ML.NET架构及应用编程

平台上的一个机器学习框架,它提供了一套丰富的算法和工具,使得开发人员可以轻松地构建和部署机器学习模型。支持多种编程语言,包括等,这使得它成为跨平台机器学习的理想选择。的架构主要包括三个部分:数据读取、...

发表评论

访客

看不清,换一张

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