Nginx负载均衡核心在于upstream定义服务器组与匹配业务的分发策略:轮询适用于无状态均性能场景,加权轮询按weight分配流量,least_conn优先调度连接少的节点,ip_hash实现会话保持,proxy_pass转发并需设置真实IP等请求头。

配置 Nginx 实现后端集群资源负载的合理分布,核心在于两部分:定义可调度的服务器组(upstream),以及选用匹配业务特性的分发策略。不是简单加几台机器就行,关键要看你的服务有没有状态、各节点性能是否一致、请求时长是否差异大。
定义 upstream 服务器组
这是所有负载均衡配置的起点,在 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/*.conf 中添加:
- 用
upstream块声明一个逻辑名称(如backend),里面列出所有后端节点地址和端口 - 支持 IP 或域名,可带端口(如
192.168.1.100:3000);若用域名,确保 DNS 解析稳定 - 可为节点添加状态标记:
backup表示仅当其他节点不可用时启用;down表示手动下线;max_fails=3 fail_timeout=30s控制健康检查失败阈值
按需选择负载均衡算法
算法决定请求如何落到具体节点,选错会导致负载不均甚至会话中断:
- 轮询(默认):适合无状态、节点性能相近的场景,Nginx 自动跳过已失效节点
-
加权轮询(weight):给高性能节点设更高权重(如
weight=3),低配节点设weight=1,让流量按比例分配 - 最少连接(least_conn):适用于长连接或耗时操作(如文件上传、WebSocket),优先派发到当前活跃连接最少的节点
- IP 哈希(ip_hash):同一客户端 IP 总是打到同一后端,解决无共享 Session 的会话保持问题;注意 IPv4/IPv6 兼容性
- 一致性哈希等高级策略需第三方模块,日常较少直接使用
配置反向代理转发规则
在 server 块中把请求真正转出去,不只是写个 proxy_pass 就完事:
-
proxy_pass http://backend;指向前面定义的 upstream 名称 - 必须设置
proxy_set_header Host $host;和X-Real-IP等头字段,否则后端拿不到真实客户端信息 - 若后端依赖 HTTPS 协议标识,加上
proxy_set_header X-Forwarded-Proto $scheme; - 建议开启缓冲控制(如
proxy_buffering on;)和超时设置(proxy_connect_timeout、proxy_read_timeout),避免请求卡死
验证与热更新配置
改完配置不能直接 reload,得先确认语法和逻辑正确:
- 运行
sudo nginx -t检查配置文件是否合法 - 无误后执行
sudo systemctl reload nginx(或sudo nginx -s reload)热生效 - 观察
nginx -T | grep -A5 'upstream'输出,确认实际加载的 upstream 结构 - 可通过访问日志或后端 access 日志比对各节点请求量,判断是否达到预期分布


















