Nginx默认启用轮询负载均衡,只需在upstream块中按顺序列出server地址(如192.168.1.101:80),不加weight等参数即生效;请求严格循环分发,所有节点默认权重为1,并可配合max_fails和fail_timeout实现基础故障隔离。

直接在 upstream 块里列出后端服务器地址,不加任何参数,Nginx 就自动启用轮询——这是它默认的负载均衡方式,无需额外声明。
基础配置写法
只需定义一个 upstream 组,每行一个 server 指令,写上 IP 和端口即可:
- 所有节点默认权重为 1,请求严格按顺序轮流分发(如 A→B→C→A→B→C)
- 支持纯 IP、IP+端口(如
192.168.1.101:8080)、域名(如api-node1.example.com) - 不写端口时默认为 80(HTTP)或 443(HTTPS)
示例配置:
http {
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
让轮询更可靠:简单故障隔离
轮询本身不主动探活,但可以通过两个参数实现基础容错:
-
max_fails=数字:连续失败多少次后临时剔除该节点(例如
max_fails=3) -
fail_timeout=秒数:剔除后多久重新尝试(例如
fail_timeout=30s) - 两者需配合使用,只设一个无效;默认值是
max_fails=1、fail_timeout=10s
带健康参数的写法示例:
upstream backend {
server 192.168.1.101:80 max_fails=3 fail_timeout=30s;
server 192.168.1.102:80 max_fails=3 fail_timeout=30s;
server 192.168.1.103:80 max_fails=3 fail_timeout=30s;
}
验证轮询是否生效
避免浏览器缓存干扰,建议用命令行工具测试:
- 用
curl连续发起请求:for i in {1..6}; do curl http://your-nginx-ip/; done,观察响应是否交替来自不同后端 - 查看各后端 access 日志,确认访问时间戳和来源 IP 呈规律性轮转
- 用
ab -n 12 -c 1 http://your-nginx-ip/压测,统计三台后端各自收到的请求数应接近 4:4:4
什么情况下要小心轮询
它简单公平,但不是万能方案:
- 后端处理耗时差异大(比如有的接口 50ms,有的要 1.5s),容易造成部分节点连接堆积
- 业务需要会话保持(如登录态、购物车),轮询会把同一用户打到不同机器,导致状态丢失
- 节点性能明显不均(如一台是 16 核,另两台是 4 核),建议改用加权轮询或 least_conn


















