轮询是nginx默认负载均衡策略,只需在http块中定义upstream并按序列出server地址(如192.168.1.20:8080),不加参数即生效;请求严格按声明顺序循环分发,所有节点默认权重为1,适用于性能相近、无状态场景,但需配置max_fails/fail_timeout实现基础故障隔离。

Linux 下用 Nginx 配置轮询负载均衡,核心就是定义 upstream 组并按顺序列出后端地址,再在 location 中用 proxy_pass 引用——它默认启用,不写额外参数就是轮询。
基础配置结构要写对
轮询不需要开启开关或指定算法名,只要 upstream 块里只写 server 行,Nginx 就自动按顺序分发请求:
- 每个
server后跟 IP 和端口(如192.168.1.20:8080),支持域名 - 所有节点默认权重为 1,请求严格按声明顺序循环:第 1 个、第 2 个、第 3 个、再回到第 1 个……
- 配置建议放在
/etc/nginx/conf.d/下独立文件(如app-balancer.conf),避免修改主配置
必须加的健壮性参数
纯轮询不检查后端是否存活,线上必须补上故障隔离机制:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 给每个
server加max_fails=3 fail_timeout=30s:连续失败 3 次后,30 秒内不再转发请求过去 - 在
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和清除 Connection 头,减少连接开销
验证轮询是否生效
别依赖浏览器刷新,用命令行工具更可靠:
- 用
curl -sI http://nginx-ip/api/test | grep X-Upstream-Addr(需提前在配置中加proxy_set_header X-Upstream-Addr $upstream_addr;) - 连续执行 6 次,应看到地址按顺序出现:A→B→C→A→B→C
- 查各后端 access.log,时间戳和访问次数应基本均匀;差异明显说明某节点响应慢或被临时摘除
什么情况不能只靠轮询
轮询公平但“无脑”,业务有这些特征就得调整策略:
- 后端处理耗时不均(比如有的接口 50ms,有的要 1.5s)→ 改用
least_conn更合理 - 需要登录态、购物车等服务端会话 → 必须换
ip_hash或引入 Redis 共享 session - 节点性能差异大(如一台 16 核,两台 4 核)→ 改用加权轮询,设
weight=4、weight=1、weight=1










