nginx灰度发布通过加权轮询实现流量渐进切分,权重为相对整数比(如99:1),推荐起始梯度20:1,需配置健康检查、头透传,支持秒级回滚,但不保证会话保持且不支持上下文路由。

Nginx 集群中通过后端权重梯度实现灰度发布,本质是用加权轮询(weighted round-robin)在 HTTP 层做渐进式流量切分,不依赖业务改造、不引入额外组件,适合快速验证新版本稳定性。
权重梯度的核心逻辑
权重不是百分比,而是相对整数比例。比如 v1 权重设为 99,v2 设为 1,实际分流比就是 99:1(≈99% → 1%)。只要比例一致,数值大小不影响理论分配,但小基数(如 99/1)比大基数(如 9900/100)更利于平滑调整和减少连接复用带来的偏差。
配置要点与实操建议
- upstream 中每个 server 必须指向可区分的后端地址(不同 IP、端口或域名),不能共用同一服务实例
- 推荐起始梯度设为 v1:20 / v2:1(即 5% 新版本),便于后续每次+1或×2逐步放大
- 加入健康检查参数(max_fails=2 fail_timeout=30s),避免单点故障拖累整体灰度节奏
- 不要省略 proxy_set_header,确保 X-Real-IP、Host 等关键头透传,方便后端日志归因
动态调整与观测闭环
- 修改权重后执行 nginx -t && nginx -s reload 生效,无需重启进程
- 监控维度应聚焦新版本节点的 error_rate、avg_response_time、5xx 比例,而非总 QPS
- 若异常明显,可立即把新版本 weight 改为 0,或注释对应 server 行并 reload,实现秒级回滚
适用边界需清楚
- 它只按请求次数分流,无法保证同一用户始终打到同一版本(会话不保持)
- 不支持基于用户 ID、Header 或设备类型等上下文做精准路由
- 大流量下若后端响应延迟差异大,加权轮询可能因连接复用导致实际比例漂移,此时需配合慢启动(slow_start)或改用 map+cookie 组合策略
不复杂但容易忽略











