Nginx轮询负载均衡默认启用,只需在http块内定义upstream组并按序列出后端服务器,再通过proxy_pass引用;它按请求顺序均匀分发,适用于性能相近的无状态微服务,但需配合max_fails、fail_timeout等参数增强健壮性。

使用 Nginx 的轮询(Round Robin)算法实现后端微服务负载均衡,是最基础也最常用的配置方式。它默认启用,无需额外参数,适合后端节点性能相近、无状态的微服务场景。
基础轮询配置结构
Nginx 默认的 upstream 模块即采用加权轮询(权重为 1 时等效于纯轮询)。只需定义服务组并按序列出节点即可:
示例配置片段(/etc/nginx/conf.d/microservice.conf):
upstream ms_backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
location /api/ {
proxy_pass http://ms_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
理解轮询的实际行为
轮询不是严格“每请求一次切换”,而是按连接或请求顺序依次分发。Nginx 在工作进程中维护一个当前索引,每次新请求到来时递增并取模,确保整体均匀。注意以下几点:
- 每个 worker 进程独立维护轮询计数器,高并发下可能出现短暂不均,但长期统计仍趋近均衡
- 不感知后端健康状态——若某节点宕机且未配置健康检查,Nginx 仍会尝试转发,导致失败
- 默认不保持会话(session),不适合有服务端状态的场景;如需粘性会话,应改用
ip_hash或配合 Redis 共享 session
增强可用性的必要补充
仅靠轮询不够健壮,建议搭配以下配置提升微服务集群稳定性:
-
启用主动健康检查:添加
max_fails=3 fail_timeout=30s到每个server行,使 Nginx 在连续失败后临时摘除节点 -
设置超时与重试:在
location块中加入proxy_connect_timeout 5s;、proxy_read_timeout 30s;和proxy_next_upstream error timeout http_500 http_502; -
限制单个连接请求数(可选):对长连接场景,用
keepalive 32;配合proxy_http_version 1.1;和proxy_set_header Connection '';复用连接,减少开销
验证与调试技巧
部署后可通过以下方式确认轮询生效:
- 用
curl -I http://your-nginx/api/health多次请求,观察响应头中的X-Upstream-Addr(需在 proxy_pass 后添加proxy_set_header X-Upstream-Addr $upstream_addr;) - 查看 Nginx 访问日志,对比各后端 IP 出现频次是否接近(开启
log_format包含$upstream_addr) - 模拟节点故障(如停掉一台服务),确认错误率上升后迅速回落,且剩余节点承接全部流量


















