Nginx 可通过 Cookie 实现灰度发布:先定义 stable/beta 两组 upstream,再用 map 指令根据 $cookie_version 值映射 $backend_group,最后在 location 中 proxy_pass 动态路由至 backend_$backend_group。

Nginx反向代理实现基于Cookie的灰度发布

用 Nginx 实现基于 Cookie 的灰度发布,核心是让 Nginx 根据用户请求中特定 Cookie 的值(比如 version=beta)决定将流量转发到不同后端服务(如 stable 或 beta 集群),无需修改业务代码,轻量可控。

配置 upstream 区分灰度与正式集群

先定义两组后端服务,明确标识用途:

upstream backend_stable {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

upstream backend_beta {
    server 192.168.1.20:8080;
    server 192.168.1.21:8080;
}

确保各组服务已就绪且可独立访问,IP 和端口按实际环境调整。

通过 map 指令提取并判断 Cookie 值

利用 Nginx 内置的 map 模块,将 Cookie 中的版本标识映射为一个变量,便于后续条件路由:

map $cookie_version $backend_group {
    default         "stable";
    "~*beta"        "beta";
    "~*v2"          "beta";
}

在 location 中按变量选择 upstream

在 server 块的 location 内,用 proxy_pass 动态指向对应 upstream:

location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_pass http://backend_$backend_group;
}

注意:http://backend_$backend_group 中的变量拼接依赖于 Nginx 1.3.10+,旧版本需改用 if + rewrite 或 Lua 扩展。

可选:支持手动触发灰度(如带参 URL 或 Header)

增强灵活性,可叠加其他触发条件:

这类扩展建议统一收口到 map 定义中,保持主逻辑简洁。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。