Nginx默认轮询分发请求,需在http块中定义upstream组并配合proxy_pass使用;各server权重为1、顺序轮流接收请求,适合配置相近的无状态后端,但不自动健康检查。

直接用 upstream 块定义服务器组,Nginx 默认就是轮询分发,不需要额外指定算法。
基础轮询配置写法
只要在 http 块里声明一个 upstream 组,把后端地址列进去,Nginx 就会按顺序逐台转发请求:
- 每台服务器轮流接收下一个请求,不看当前负载或响应时间
- 所有 server 行默认权重为 1,地位完全平等
- 配置示例:
upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; }
配合反向代理生效
轮询本身只是定义分发规则,必须结合 proxy_pass 才能把流量真正打过去:
- 在
server块里设置 location,指向刚才定义的 upstream 名称 - 记得保留客户端真实 IP(加
proxy_set_header X-Real-IP $remote_addr;) - 典型用法:
server { listen 80; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
轮询的适用前提和限制
它简单可靠,但不是万能的,得看后端是否匹配它的假设:
- 适合场景:后端服务器硬件配置接近、应用处理耗时稳定、无状态服务
- 不适合场景:某台机器明显更慢或更忙,会导致请求堆积;或者需要同一用户始终落在同一台机器(如 session 未共享)
- 注意:轮询不自带健康检查,异常节点仍会收请求,建议搭配
max_fails和fail_timeout使用
验证是否生效
最直接的方式是看日志或临时加响应头区分后端:
- 在每台后端服务返回的 HTTP 响应头里加个唯一标识,比如
X-Backend-ID: node-a - 用 curl 多次请求 Nginx,观察响应头变化,如果循环出现不同 ID,说明轮询已起作用
- 也可以查 Nginx 的 access.log,确认请求确实分到了不同 upstream 地址


















