Nginx默认采用轮询策略实现负载均衡,无需额外声明;只需在http块中定义含多个server的upstream组,并在server块中用proxy_pass引用该组,请求即按顺序依次分发至各后端。

Nginx 默认就用轮询策略分发请求,不需要额外开启或声明,只要配置了 upstream 块并列出多个后端服务器,它就会自动按顺序轮流转发。
关键点是:轮询是 Nginx 的默认行为,没加任何参数就是轮询。
怎么配一个轮询负载均衡?
- 编辑主配置文件或单独的 conf 文件(比如
/etc/nginx/conf.d/loadbalance.conf) - 在
http块里定义upstream,写上至少两个后端地址 - 在
server块里用proxy_pass指向这个 upstream 名称
示例配置:
http {
upstream backend {
server 192.168.1.100:80;
server 192.168.1.101:80;
server 192.168.1.102:80;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}轮询是怎么工作的?
- 请求进来时,Nginx 按列表顺序依次交给每个 server:第 1 个给
192.168.1.100,第 2 个给192.168.1.101,第 3 个给192.168.1.102,第 4 个又回到192.168.1.100……循环下去 - 所有 server 权重默认为 1,所以分配比例是 1:1:1
- 如果某台 server 不可用(比如连不上),Nginx 会自动跳过它,等恢复后再加入轮询队列(配合
max_fails和fail_timeout可增强容错)
可选增强写法(带健康检查):
upstream backend {
server 192.168.1.100:80 max_fails=3 fail_timeout=30s;
server 192.168.1.101:80 max_fails=3 fail_timeout=30s;
server 192.168.1.102:80 max_fails=3 fail_timeout=30s;
}验证是否生效?
- 重启或重载配置:
sudo nginx -t && sudo systemctl reload nginx - 用
curl多次访问负载均衡入口,观察后端日志或返回内容,确认请求确实在几台机器间交替出现 - 注意:浏览器可能因缓存或 Keep-Alive 影响观察效果,建议用
curl -H "Cache-Control: no-cache"或换不同终端测试
不复杂但容易忽略:确保后端服务本身能正常响应 HTTP 请求,且 Nginx 能通达它们的 IP 和端口——轮询再准,网络不通也白搭。


















