nginx负载均衡需按场景选算法:轮询适用于均质集群,加权轮询适配异构服务器,ip_hash保障会话连续性,least_conn优化长连接分发,并须配置健康检查与合理实践。

Nginx 集群中平衡业务压力,核心在于合理选用并配置 upstream 模块中的负载均衡算法,结合后端服务器实际能力与业务特征动态分发请求。不是选一个“最先进”的算法,而是选一个“最匹配”的策略。
轮询(Round Robin)适合基础均压场景
当所有后端服务器硬件配置、负载水平和响应能力基本一致时,轮询是最简洁可靠的默认方案。它按顺序把请求逐一分配,天然避免单点过载。但要注意:若某台服务器响应变慢或出现长连接积压,轮询本身不会感知——需配合健康检查机制才能及时剔除异常节点。建议加上 max_fails=3 fail_timeout=30s 参数,让 Nginx 主动标记并绕过故障节点。
加权轮询(Weighted Round Robin)适配异构集群
真实环境中,服务器往往新旧混用、规格不一。比如一台 16 核服务器和一台 4 核服务器共存,直接轮询会导致后者迅速打满。此时用 weight 显式声明能力比例:
upstream backend {
server 192.168.1.101 weight=4; # 高配机
server 192.168.1.102 weight=1; # 低配机
}
权重比反映的是请求处理能力的相对比例,不是绝对数量。Nginx 会按 4:1 的节奏调度,使高配机承担约 80% 流量,整体 CPU 利用率更趋均衡。
IP Hash 保障会话连续性,间接稳定压力分布
对未做 Session 共享的传统 Web 应用(如 PHP+文件存储 Session),用户反复跳到不同后端会导致登录态丢失、购物车清空等问题。启用 ip_hash 后,同一 IP 的请求始终落在同一台服务器上,既维持了业务逻辑正确性,也避免了因频繁切换导致的重复初始化开销和局部抖动。但要注意:该策略下扩容或缩容后端节点会引发哈希重散列,部分用户会话中断,不适合弹性伸缩频繁的云环境。
最少连接(least_conn)缓解长连接压力
WebSocket、gRPC 或 HTTP/2 等长连接场景下,轮询容易造成连接数严重不均。比如某台服务器已建立 500 个活跃连接,另一台才 50 个,但轮询仍继续派发新请求。least_conn 指令让 Nginx 始终选择当前活跃连接数最少的后端,显著降低连接堆积风险。配置只需一行:
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
实测在视频直播信令服务中,该策略可将各节点连接数标准差压缩至 10% 以内。
补充关键实践点
- 所有 upstream 中的
server行都应加上max_fails和fail_timeout,形成基础容错闭环 - 若需更高精度调度(如按响应时间动态调权),需引入 Nginx Plus 或开源模块
nginx-upstream-check-module实现主动健康检查 - 避免混合使用
ip_hash与weight,二者逻辑冲突;如需兼顾会话与权重,可考虑hash $remote_addr consistent(一致性哈希)配合weight
不复杂但容易忽略











