
轮询(Round Robin)是 Nginx 默认启用的负载均衡调度方式,不需额外配置即可生效。它适用于后端服务器硬件配置、处理能力相近,且请求响应时间相对稳定的场景。核心目标是让每台服务器承担大致相等的流量压力,避免单点过载。
轮询算法怎么工作
轮询按顺序将每个新请求依次分发给 upstream 块中定义的服务器,形成一个循环队列。比如定义了三台服务器 A、B、C,分配顺序就是:第1个请求 → A,第2个 → B,第3个 → C,第4个 → A,第5个 → B……如此往复。
- 分配过程无状态,不依赖客户端 IP、请求内容或会话信息
- 每次转发只看当前轮到哪台,不考虑服务器当前连接数、CPU 或响应延迟
- 若某台服务器临时不可用(如主动下线或健康检查失败),Nginx 会跳过它,继续轮询其余可用节点
基础配置写法
只需在 upstream 块中列出后端地址,不加任何参数即启用轮询:
upstream backend {server 192.168.1.10;
server 192.168.1.11;
server 192.168.1.12;
}
再在 location 中引用即可:
proxy_pass http://backend;
}
提升稳定性的常用配合参数
纯轮询本身不带容错机制,但可通过以下参数增强健壮性:
- max_fails=3:连续失败 3 次后,标记该服务器为不可用
- fail_timeout=30s:在 30 秒内不向该服务器转发新请求
- slow_start=60s(建议搭配 weight 使用):刚恢复的服务器会逐步增加流量,避免瞬间压垮
示例:
upstream backend {server 192.168.1.10 max_fails=3 fail_timeout=30s;
server 192.168.1.11 max_fails=3 fail_timeout=30s slow_start=60s;
server 192.168.1.12;
}
轮询的局限与应对思路
它无法感知实际负载,当服务器性能差异大、请求耗时波动剧烈,或存在长连接/慢请求堆积时,容易出现“表面均匀、实际不均”的情况。
- 若后端节点能力不一致,改用加权轮询(weight 参数)更合理
- 若需保持用户会话粘性(如登录态),轮询不合适,应切换为 ip_hash
- 对响应时间敏感的服务,可考虑 least_conn(最少连接)或结合第三方模块做动态权重调整











