Nginx 通过 upstream 模块支持加权轮询负载均衡,按 weight 参数分配流量比例(如 3:1:2),配合 proxy_pass 实现反向代理;还支持 ip_hash、least_conn、hash $request_uri consistent 等策略。

使用 Nginx 做反向代理时,通过 upstream 模块可轻松实现后端服务的负载均衡,并支持按权重分配请求流量。权重值越大,该服务器接收的请求比例越高,适合后端节点性能不均或需灰度发布等场景。
配置 upstream 实现带权重的负载均衡
在 Nginx 配置中定义一个 upstream 块,为每个后端 server 指定 weight 参数:
upstream backend_servers {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2;
}
上述配置表示:三台后端服务器的请求分发比例约为 3:1:2(即 50%、16.7%、33.3%)。Nginx 默认采用加权轮询(weight + round-robin)策略,无需额外声明。
配合 proxy_pass 使用反向代理
在 server 块中调用已定义的 upstream 名称即可完成代理转发:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
注意:proxy_pass 后的地址必须与 upstream 名称完全一致(不含协议和端口),否则 Nginx 会将其识别为普通域名而非 upstream 组。
其他常用负载均衡策略补充
除加权轮询外,Nginx 还支持多种策略,可通过 upstream 内部指令启用:
- ip_hash:基于客户端 IP 哈希,确保同一 IP 总访问同一后端(适合需会话保持的场景);但不兼容权重设置
- least_conn:优先将请求转发给当前连接数最少的后端;适用于长连接较多的服务
- hash $request_uri consistent:对 URI 做一致性哈希,适合缓存类服务,提升缓存命中率
验证与调试建议
配置完成后需重载 Nginx 并观察实际流量分布:
- 执行
nginx -t检查语法,再运行nginx -s reload生效 - 开启后端日志中的
X-Forwarded-For或自定义 header,便于追踪请求来源 - 用
ab或wrk发起并发请求,结合后端 access log 统计各节点请求数,验证权重是否符合预期 - 若某节点临时下线,可添加
down标记(如server ... down;),Nginx 将自动跳过该节点

















