轮询调度是Nginx默认的无状态负载均衡策略,按顺序均匀分发请求,支持weight加权、健康检查及自动容错,需后端完全无状态并配合外置会话与统一存储。

轮询调度是 Nginx 实现无状态服务水平扩展最常用、最基础的方式。它不依赖后端状态,只按顺序将请求均匀分发到多个上游服务器,天然适配无状态架构。
轮询(round-robin)是默认负载策略
Nginx 在 upstream 块中未显式指定调度算法时,默认采用轮询。每个请求按顺序分配给列表中的下一台服务器,循环往复。这种机制简单可靠,适合后端服务实例性能相近、处理能力均衡的场景。
- 无需额外配置,开箱即用
- 自动跳过不可用节点(配合
max_fails和fail_timeout) - 支持通过
weight手动调节各节点承载比例(例如高配机器设为weight=2)
确保服务真正无状态是前提
轮询有效工作的前提是:所有后端实例独立处理请求,不依赖本地会话、缓存或临时文件。否则,用户连续请求落到不同实例上会导致数据不一致或功能异常。
- 会话信息必须外置(如存入 Redis 或数据库)
- 文件上传需统一存储(如对象存储 OSS 或共享 NFS)
- 避免使用本地内存缓存高频变动数据;若需缓存,应使用分布式缓存
配合健康检查提升可用性
单纯轮询无法感知后端是否真实可用。建议启用主动健康检查,让 Nginx 定期探测接口,自动摘除故障节点。
- 使用
health_check指令(需启用ngx_http_upstream_health_check_module,通常在 Plus 版本或 OpenResty 中支持) - 或通过
max_fails=3 fail_timeout=30s配合被动检查(基于返回状态码或超时) - 搭配
down标记可手动下线维护中的节点
实际配置示例
一个典型的轮询 upstream 配置如下:
upstream backend {server 192.168.1.10:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 weight=2 max_fails=3 fail_timeout=30s;
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
其中第三台服务器因配置了 weight=2,将接收约 50% 的流量,其余两台各约 25%,实现按能力加权的轮询分发。


















