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

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

admin2个月前 (04-05)AI技术51

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

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/

相关文章

【深度学习】Java DL4J 2024年度技术总结

一、Java DL4J深度学习概述 1.1 DL4J框架简介 1.2 与其他深度学习框架的比较 1.3 DL4J 的优势 1.3.1 与 Java 生态系统的无...

神经网络分类总结

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

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

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

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

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

bp神经网络是什么网络,神经网络和bp神经网络

1、前馈神经网络:一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。 2、BP神经网络:是一种按照误差逆向传播...

AI实战详解:Perplexity 怎么做市场调研 Perplexity 市场分析实操教程【商业】最佳实践|Duuu笔记

掌握Perplexity AI市场调研需五步:一、结构化提问嵌入地域/时间/主体/指标四要素;二、限定PDF等原始信源提升可信度;三、分步提问生成制表符分隔文本以自动导入Excel;四、启用Pro S...

发表评论

访客

看不清,换一张

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