Nginx 的 weight 参数通过相对权重比例实现多版本流量分配,适用于灰度发布等渐进导流场景;需配合 map 动态路由、健康检查及重载生效机制,weight 为正整数且支持 weight=0(1.9.1+),非百分比。
用 Nginx 的 weight 参数做多版本并行部署,本质是靠权重控制流量比例,而不是“切换开关”。它适合灰度发布、蓝绿过渡这类需要渐进式导流的场景,不依赖额外组件,但需配合路由逻辑和健康检查才能真正落地。
weight 不是百分比,而是相对比例。比如 blue 版本设为 weight=8,green 设为 weight=2,实际分流比就是 8:2(即 80%→blue,20%→green)。关键点在于:
weight=0(Nginx 1.9.1+ 支持),旧版本可用 backup 或极低权重(如 1)替代仅靠 weight 无法按需切换目标,必须引入变量驱动路由。常见做法是用 map 将请求特征映射为 upstream 名称:
X-Deploy-Phase: green)选择后端分组map $arg_version $upstream_name { "v1" "backend_v1"; "v2" "backend_v2"; }
权重只是调度依据,真实可用性要靠探测保障:
max_fails=3 fail_timeout=30s,自动隔离异常节点least_conn 或 ip_hash 等算法使用,避免权重与连接状态冲突Nginx 不支持热更新 weight 值,每次修改都要触发配置重载:
nginx -t 验证语法正确性nginx -s reload 平滑加载新配置(不中断现有连接)stub_status 或 Prometheus exporter 跟踪各 upstream 的请求计数,验证分流是否符合预期