Nginx加权轮询需在upstream块的server行末尾严格写为“server IP:端口 weight=N;”,权重为正整数、表示相对比例,必须配合proxy_pass引用且经nginx -t校验和reload生效。

直接在 upstream 块的 server 行末尾加上 weight=数值 即可,不需要额外声明算法、不加引号、不换行、不写空格分隔。Nginx 默认就是加权轮询,weight 是唯一激活权重行为的参数。
weight 必须写在 server 指令同一行
语法必须严格:地址和 weight 之间只能有空格,不能有等号前后空格、不能换行、不能加引号或分号。
- ✅ 正确:
server 192.168.1.10:8000 weight=3; - ❌ 错误:
server 192.168.1.10:8000 weight = 3;(空格导致解析失败) - ❌ 错误:
server 192.168.1.10:8000<br>weight=3;
(换行 Nginx 不识别) - ❌ 错误:
server 192.168.1.10:8000 weight="3";(字符串不支持)
权重是相对整数,不是百分比
weight 只看比值,不看绝对大小。设为 weight=30 和 weight=10,等同于 weight=3 和 weight=1 —— 实际分发比例都是 3:1。
- 三台服务器配
weight=4、weight=2、weight=2→ 流量比为 4:2:2 = 50% : 25% : 25% - 未写 weight 的 server 默认为
weight=1 - 避免用小数(如
weight=0.5)或负数,多数版本不支持
配置位置与关联使用
weight 只能在 http 块内的 upstream 定义中使用,且必须配合 proxy_pass 引用该 upstream 名称。
- 先定义:
upstream api_cluster { server 10.0.0.1:3000 weight=3; server 10.0.0.2:3000 weight=1; } - 再引用:
location / { proxy_pass http://api_cluster; } -
proxy_pass后的名称必须与 upstream 名完全一致(区分大小写)
改完必须验证并重载
修改后不执行校验和重载,配置不会生效,旧 worker 进程仍按原规则运行。
- 检查语法:
nginx -t(输出success才安全) - 热更新配置:
nginx -s reload(Linux/macOS)或管理员权限下运行(Windows) - 切回纯轮询?删掉所有
weight=xxx即可,无需加round_robin等关键词(Nginx 不识别,会报错)


















