nginx轮询策略不支持直接调整顺序,但可通过weight设权重、ip_hash绑定ip、least_conn按连接数分发、down/backup手动干预等方式间接控制请求分发。

Nginx 默认的 round-robin(轮询)负载均衡策略是按配置顺序依次分发请求,不支持直接“调整顺序”如跳过某台、优先某台或动态重排,但可以通过以下几种方式间接控制请求分发逻辑。
使用 weight 参数调节权重
这是最常用也最直接的方式:给不同 upstream server 设置不同权重,数值越大,被选中的概率越高,从而改变实际请求分配的倾向性。
- 权重值为整数,默认为
1 - 权重不改变轮询“顺序”,但会改变“频率”——比如
weight=3的服务器在每 4 次请求中大约收到 3 次 - 示例配置:
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
启用 ip_hash 实现客户端 IP 绑定
如果你希望同一客户端始终打到同一台后端(避免 session 丢失),可关闭轮询,改用哈希固定分发目标。
- 仅适用于 IPv4(IPv6 需要 Nginx 1.7.2+ 并显式开启
ip_hash支持) - 不支持权重(会忽略
weight、max_fails等参数) - 当某台 server 下线时,对应哈希槽位的用户请求会重新分配,可能引发抖动
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
用 least_conn 替代轮询
当后端处理能力差异大或请求耗时悬殊时,按当前连接数最少的节点分发,比纯轮询更公平。
- 适合长连接、异步服务(如 WebSocket、gRPC 流)
- 仍可配合
weight使用(Nginx 1.11.5+) - 不保证严格顺序,但能缓解单点过载
least_conn;
server 192.168.1.10:8080 weight=2;
server 192.168.1.11:8080 weight=1;
}
通过 down 和 backup 手动干预调度
若需临时下线某节点,或设置灾备节点,可用这些标记影响实际参与轮询的成员列表。
-
down:该 server 不参与任何请求分发(常用于维护) -
backup:仅当所有非 backup 节点都不可用时才启用(类似故障转移) - 二者不影响配置顺序,但会实时改变有效候选集
server 192.168.1.10:8080;
server 192.168.1.11:8080 down;
server 192.168.1.12:8080 backup;
}
不复杂但容易忽略:Nginx 的 upstream 调度行为由模块实现,原生轮询没有“索引偏移”或“起始位置”配置项。真要实现自定义顺序逻辑(如按健康检查结果动态排序),需借助第三方模块(如 nginx-upstream-check-module + Lua)或外部服务做 DNS/Service Discovery 层调度。











