权重控制是Nginx实现差异化流量分发最常用方式,需在upstream中配置weight(相对值,非百分比),配合健康检查(如max_fails=2 fail_timeout=30s)才可靠,仅在加权轮询模式下生效,ip_hash等策略会使其失效,须通过实际请求日志验证效果。
权重控制是 Nginx 实现差异化流量分发最常用也最实用的方式,它不依赖外部模块,直接在 upstream 块中配置即可生效。核心在于理解 weight 是相对值而非绝对百分比,且只在服务器健康时起作用。
在 upstream 中为每个 server 指定 weight 值,Nginx 会自动归一化计算实际占比:
单靠 weight 无法应对后端故障。一旦某台服务器因响应超时或返回错误被标记为不可用,它的 weight 就暂停生效,剩余健康节点会按各自 weight 重新归一化分担全部流量:
max_fails=2 fail_timeout=30s
max_fails、fail_timeout 联动设置某些负载均衡策略会覆盖或忽略 weight 设置,使用前需注意兼容性:
ip_hash 启用后,weight 完全失效,因为请求必须固定到同一台后端least_conn 和 hash $request_uri 等策略本身不基于轮询,weight 不参与调度逻辑配置完成后不能仅凭理论判断,需通过实际请求分布来确认:
nginx -t && nginx -s reload 生效配置$http_x_forwarded_for 或自定义 header(如 X-Upstream-Addr)ab -n 1000 -c 100 http://domain/ 发起批量请求,统计各节点日志请求数