在 nginx 中配置 upstream 负载均衡策略,需要在 http 块内使用 upstream 指令定义后端服务器组,并在 server 块中使用 proxy_pass 指向该组。nginx 默认采用轮询(round robin)策略,即请求按顺序依次分配给各服务器;若需加权轮询,可在 server 指令中添加 weight 参数;若需基于客户端 ip 固定分发,可使用 ip_hash 指令。这些配置直接决定了流量在后端节点间的分布逻辑。

如何配置默认的轮询与加权轮询策略
默认情况下,Nginx 的 upstream 模块使用轮询算法,每个请求按时间顺序逐一分配到不同的后端服务器。如果需要让某些性能更强的服务器承担更多流量,可以设置 weight 权重值,权重越高,被分配的请求概率越大。这种配置适用于后端服务器硬件配置不一致的场景,通过调整权重实现负载的均衡分配。

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 个请求中,约有 3 个会发给第一台服务器,1 个发给第二台。预期结果是流量按照 3:1 的比例分布,验证方法可观察后端服务器的访问日志统计。
如何实现基于客户端 IP 的会话保持
当后端应用需要保持用户会话状态时,可以使用 ip_hash 策略。该策略根据客户端的 IP 地址计算哈希值,将同一 IP 的请求始终转发到固定的后端服务器。这解决了无状态负载均衡下用户登录状态丢失的问题,特别适用于没有外部会话存储(如 Redis Session)的传统单体应用架构。

upstream session_aware_pool {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
location / {
proxy_pass http://session_aware_pool;
}
}
在此配置中,所有来自相同客户端 IP 的请求都会被哈希算法映射到同一个 server 节点。如果某台服务器宕机,Nginx 会将该节点的流量暂时重分配到其他存活节点,直到其恢复。预期结果是同一用户的多次请求始终到达同一后端实例,从而维持本地内存中的会话数据一致性。
当后端服务器返回 502 错误时负载均衡器如何处理
在 upstream 配置中,如果某台后端服务器因服务不可用或连接超时返回 502 Bad Gateway 错误,Nginx 会根据 max_fails 和 fail_timeout 参数自动将该服务器标记为临时不可用。在 fail_timeout 指定的时间内,Nginx 不会再向该故障服务器发送新请求,而是将流量切换至其他健康的后端节点,从而实现故障转移。这一机制确保了在高可用要求下,单个节点故障不会导致整个服务中断。











