标准轮询是nginx默认负载均衡方式,需将upstream块置于http块内,按顺序列出后端ip和端口,权重默认为1;推荐配置max_fails和fail_timeout实现被动健康检查,并通过proxy_pass http://backend; 正确引用。

标准轮询就是 Nginx 默认行为,不需要额外关键字,只要正确写好 upstream 块并列出后端地址即可生效。
upstream 必须放在 http 块内
不能写在 server 或 location 里,否则启动会报 unknown directive "upstream"。正确位置是:
- 主配置文件(如
/etc/nginx/nginx.conf)的http { ... }大括号内部 - 或独立 conf 文件(如
/etc/nginx/conf.d/load-balancer.conf)中,确保被http包裹
基础轮询配置写法
每台服务器只写 IP 和端口,不加任何参数,Nginx 自动按顺序轮流分发请求:
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
- 所有
server默认权重为 1,流量均等分配 - IP 和端口必须真实可达;Nginx 启动时不校验连通性,但首次请求失败会触发 502 错误
- 行末必须有分号,不能多加逗号、空格或其他符号
推荐加上健康检查参数
让 Nginx 在某台服务异常时自动跳过,提升可用性:
upstream backend {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 max_fails=3 fail_timeout=30s;
}
-
max_fails=3:连续 3 次请求失败(超时、502/503/504)后标记为不可用 -
fail_timeout=30s:接下来 30 秒内不再转发请求到该节点 - 这个机制是被动的,不依赖主动探针,轻量且可靠
在 server 中正确引用 upstream
定义完 upstream 后,必须通过 proxy_pass 调用,且格式要严格:
server {
listen 80;
location / {
proxy_pass http://backend; # 注意:协议 + 斜杠 + 名称,结尾有分号
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
-
backend必须和 upstream 名称完全一致(区分大小写) -
proxy_pass http://backend;是对的;proxy_pass http://backend(缺分号)语法错误 - 末尾加斜杠(如
http://backend/)会导致 URI 重写,可能破坏后端路径逻辑











