Nginx 通过匹配 Cookie 将请求定向到特定服务器

作者:程序员平 原文:mp.weixin.qq.com/s/-a-lgvWnL...

在构建 Web 服务架构时,我们通常使用 Nginx 作为反向代理和负载均衡器来分担后端服务器的压力。但在一些特定场景下,我们希望"指定某类用户的请求跳转到特定服务器",这种定向行为不仅能用于灰度发布、A/B 测试,也可以用于调试、问题排查等目的。本文我们主要以 Nginx 配置为例,介绍如何通过识别客户端 Cookie,将请求分配到不同的后端服务器上。

一、为什么要通过 Cookie 来分流请求?

之所以考虑通过识别 Cookie 的值,来将请求代理到不同的服务器,主要有以下几个目的:

1. 灰度发布 / A/B 测试

通过设置特定 Cookie(如 test_version=3),我们可以让一部分用户体验新的功能或页面,而不影响其它正式用户。例如:

bash 复制代码
if ($http_cookie ~* "test_version=3") {    proxy_pass https://ts.test.com;    break;}

这段配置会识别用户请求中的 Cookie,只要包含 test_version=3,就会将请求代理到 upstream 所指向的服务器。

  • 这样我们可以:
    • 按用户维度进行功能试验;
    • 对新版本进行分批上线,降低全量上线带来的风险;
    • 做数据分析以评估用户行为差异。

2. 定向测试或 Debug调试

开发或测试过程中,我们可能需要指定某一台服务器做调试环境,通过设置 Cookie 实现"准入控制",避免测试用户影响生产环境。

二、 Nginx配置解析

核心配置实现

bash 复制代码
location / {    limit_req zone=per_ip_and_uri burst=20 nodelay;    limit_req_status 429;
    if ($http_user_agent ~* (bingbot)) {        return 403;    }
    if ($http_cookie ~* "test_version=3") {        proxy_pass https://ts.test.com;        break;    }
    proxy_pass https://release.test.com/;
    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
css 复制代码
http {    upstream release.test.com {        server 172.31.51.115:443 weight=2;         server 172.31.48.141:443 weight=4;         server 172.31.63.236:443 weight=4;    }
    # 调试/灰度服务器    upstream ts.test.com {        server 172.31.52.221:443 weight=10;    }}

应用场景

场景 描述
灰度发布 小部分用户访问新版服务,主流用户继续访问旧版
A/B 测试 多版本内容对照测试用户偏好,支持业务决策
Bug 复现 将问题用户流量定向至日志开启服务器,便于排查
流量控制 将高流量用户定向到特定资源池进行保护
内部控制访问 通过设置 Cookie 临时开启某些功能或调试页面

其他

除了 Cookie,还有可以通过哪些方式做定向?

方式 场景 是否支持动态分流
URL 参数 临时功能跳转 否,需要前端支持
Header 头部 内部测试 / API 调用
IP 地址段 区域用户区分 否,粒度粗
Nginx map 结合 set 配置级优化 是,性能更优
Lua 模块 动态逻辑 是,功能强大但复杂

大家可以根据实际业务选择不同方式

Cookie设置方式

可以通过以下方式设置测试Cookie:

  • 开发人员手动设置浏览器Cookie
  • 通过登录系统自动分配
  • 通过中间页面选择加入测试

三、 总结

通过在 Nginx 中读取 Cookie 并将用户请求定向到特定服务器,我们可以轻松实现灰度发布、A/B 测试等精细化流量管理策略。这种方式成本低、实现快,对现有系统侵入小,是一种极具实用价值的方式。

如果你也有类似的流量定向需求,不妨试试基于 Cookie 的 Nginx 分流方案,它可能是你通往高可控、低成本灰度发布的第一步。

相关推荐
weixin_BYSJ19871 分钟前
flask民族服饰饰品商城小程序---附源码37399
java·javascript·spring boot·python·小程序·django·php
爱笑的源码基地7 分钟前
智慧工地源码, 智慧工地环境监测系统架构与绿色施工闭环设计
java·源码·智慧工地·绿色工地
YDS82912 分钟前
大营销平台 —— 第二阶段应用接口实现
java·spring boot·ddd
用户693717500138415 分钟前
DeepSeek 调价正式生效:一夜涨 11 倍,靠低价薅羊毛的日子结束了
前端·人工智能·后端
一水18 分钟前
AI 时代审查思维:审查第一篇
java·jvm·数据库·spring
用户2986985301421 分钟前
从入门到自动化:TXT 转 Word 的在线工具与代码实战方案
人工智能·后端·python
RainCityLucky33 分钟前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
jingchao199841 分钟前
Cannot read properties of null (reading ‘insertBefore‘)
前端·javascript·vue.js
贰先生42 分钟前
Xiuno BBS 审计之问题16:get_magic_quotes在 PHP 8.0 被移除
后端
爱跳舞的烤冷面1 小时前
自学嵌入式第N天(Linux篇——文件编程)
java·开发语言·前端