nginx轮询是默认负载均衡算法,按upstream中server顺序循环分发请求,不感知服务器状态;支持被动健康检查,通过max_fails和fail_timeout自动剔除/恢复节点,适用于同构、无状态服务。

Nginx 轮询算法是反向代理负载均衡的默认调度方式,不需额外配置就能启用,核心逻辑就是“按顺序、循环分发请求”。它不依赖后端服务器状态(比如当前连接数或响应时间),只依据 upstream 块中 server 的声明顺序,逐个分配新请求。
轮询的基本执行顺序
假设 upstream 中定义了三台后端服务:
- server 192.168.1.10;
- server 192.168.1.11;
- server 192.168.1.12;
那么第 1 个请求发给 192.168.1.10,第 2 个给 192.168.1.11,第 3 个给 192.168.1.12,第 4 个又回到 192.168.1.10 —— 如此循环。Nginx 内部维护一个简单的索引指针,每次转发后递进,到末尾则归零。
健康检查与自动剔除机制
轮询本身无状态,但 Nginx 会结合被动健康检查保障可用性:
- 当某台 server 连续失败(如超时、5xx)达到 max_fails 次(默认 1),会在 fail_timeout 时间内(默认 10 秒)暂停调度该节点;
- 暂停期结束后,Nginx 尝试发送探测请求;若成功,则重新纳入轮询队列;
- 这个过程对客户端透明,也不影响其他正常节点的轮询节奏。
轮询在反向代理链路中的位置
一个典型请求流经 Nginx 反向代理时,轮询发生在以下环节:
- 客户端请求到达 Nginx,匹配到含 proxy_pass http://backend 的 location;
- Nginx 查找名为 backend 的 upstream 块;
- 从该 upstream 中按轮询规则选出一台 server;
- 建立连接,转发完整请求(包括 headers 和 body);
- 收到后端响应后,原样返回给客户端。
适用场景与注意事项
轮询适合轻量、均质的服务集群:
- 后端服务器硬件配置、部署环境、应用版本基本一致;
- 接口响应时间稳定,没有明显长尾延迟;
- 业务无会话粘滞要求(如纯 REST API、静态资源服务);
- 若存在性能差异,应改用加权轮询或 least_conn 等更适应的策略。











