nginx负载均衡调度算法由upstream模块在请求进入时按预设策略实时选择后端服务器,不依赖全局状态或中心协调;包括轮询(默认,顺序循环)、加权轮询(按weight分配比例)、ip哈希(同一ip固定路由)和最少连接(选活跃连接数最少者)。

Nginx 的负载均衡调度算法不是靠外部插件或运行时计算决定的,而是由 upstream 模块在请求进入时,依据预设策略实时选择后端服务器。整个过程不依赖全局状态同步,也不需要中心协调器,完全在单次请求处理中完成决策。
轮询(Round Robin):顺序分发的基础逻辑
这是 Nginx 默认启用的算法,无需显式声明。它维护一个内部指针,每次请求到来时,按配置顺序指向下一台 server,并在到达末尾后回到开头,形成循环链表结构。
- 每台服务器被视作等权重节点,不考虑当前连接数、响应时间或 CPU 使用率
- 若某台 server 配置了
max_fails和fail_timeout,在连续失败后会被临时标记为不可用,指针跳过该节点 - 重启 Nginx 后指针重置,但运行中会持续跟踪各节点的健康状态
加权轮询(Weighted Round Robin):按能力分配流量
在轮询基础上引入整数权重值(weight),改变请求分配比例。Nginx 内部使用“加权轮询计数器”实现,不是简单按权重重复添加 server 条目。
- 权重值默认为 1;设为 0 表示该 server 不参与调度(仅作 backup 用途)
- 实际分配遵循累积权重比,例如 weight=3 和 weight=1 的两台 server,长期来看请求比例趋近于 3:1
- 权重调整需 reload 配置才能生效,原生版本不支持热更新(Nginx Plus 或第三方模块可扩展)
IP 哈希(IP Hash):客户端绑定的确定性路由
该算法对客户端 IP 地址做 CRC32 哈希运算,再对后端 server 总数取模,结果唯一对应一台 server,从而保证同一 IP 的请求始终落到同一节点。
- 天然支持会话保持,适合未使用共享 session 存储的旧架构
- 当增删后端 server 时,哈希槽位重新分布,约 30% 的客户端会被重新映射,可能引发会话丢失
- 不适用于经过代理或 NAT 的场景(如企业出口统一 IP),此时所有请求都命中同一台后端
最少连接(Least Conn):动态适配实时负载
该策略在每个请求到来时,遍历所有可用 server,比较其当前活跃连接数(包括 keepalive 连接),选择数值最小的一台。
- 特别适合长连接场景(如 WebSocket、数据库代理),能更公平地摊平压力
- 需配合
zone指令(如zone backend 64k)在多 worker 进程间共享连接统计信息 - 不感知响应时间或后端处理耗时,仅看连接数量维度











