Nginx 中轮询负载均衡怎么结合 weight 调整权重
在 nginx 的 upstream 模块中,默认使用轮询(round robin)算法分配请求。若需结合权重调整流量分发比例,只需在 server 指令后添加 weight 参数并指定整数值即可。nginx 会根据所有后端服务器权重的总和计算概率,权重越高的服务器被选中的频率越高。例如,设置权重为 1 和 3 的两台服务器,前者每 4 次请求中被选中 1 次,后者被选中 3 次。

如何配置不同权重的后端服务器组
要配置不同权重的后端服务器,需要在 http 块内定义 upstream 块,并在其中的每个 server 行末尾追加 weight=N。Nginx 会在内部维护一个基于权重的调度表,确保长周期内的请求分布符合设定的比例。这种配置适用于后端机器性能不一致的场景,高性能机器可分配更高权重以承担更多流量。

upstream backend_pool {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
}
server {
listen 80;
location / {
proxy_pass http://backend_pool;
}
}
上述配置中,192.168.1.10 的权重为 3,192.168.1.11 的权重为 1。总权重为 4。在实际运行中,Nginx 会尽量保证每 4 个请求中有 3 个发给第一台服务器,1 个发给第二台服务器。如果某台服务器宕机,Nnginx 会自动将其从池中移除,仅将流量分发给剩余的健康节点。
当权重设置为 0 时行为有何不同
当某个后端服务器的 weight 参数设置为 0 时,该服务器在负载均衡中会被暂时排除在正常调度之外。这意味着即使该服务器处于健康状态,也不会接收到任何新的客户端请求。这通常用于临时下线某台服务器进行维护,或者在测试环境中禁用特定节点。与 down 标记不同,weight=0 不会改变服务器在配置中的存在性,只是将其调度优先级降至最低。

upstream backend_pool {
server 192.168.1.10:8080 weight=5;
server 192.168.1.11:8080 weight=0;
}
在上述代码中,192.168.1.11 的权重为 0。因此,所有请求都将由 192.168.1.10 处理。如果 192.168.1.10 也宕机,Nginx 会返回 502 Bad Gateway 错误,因为池中已无可用服务器。恢复 192.168.1.11 的权重为非零值后,它将重新参与负载分担。注意,weight=0 的效果类似于将该服务器标记为不可用,但不像 down 那样完全忽略其健康检查状态(尽管通常也不发送请求)。











