Nginx默认使用加权轮询实现负载均衡,需在http块内定义upstream,用server声明后端并可设weight,再于location中通过proxy_pass http://upstream_name调用,并配代理头及重载配置生效。

直接在 upstream 块里定义服务器列表,再用 proxy_pass 指向它,Nginx 就会默认启用加权轮询(weight=1 时等权重),这是最基础、最常用的负载均衡方式。
定义 upstream 块
在 http 块内(通常在 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/*.conf 中)添加一个 upstream 配置:
- 名字自定义(如
backend_servers),后续被proxy_pass引用 - 每台后端服务器用
server指令声明,支持 IP+端口或域名 - 不写
weight默认为 1;写成weight=2表示该节点处理两倍请求量
示例:
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080 weight=2;
}
在 server 块中调用代理
把用户请求转发到 upstream 名称,Nginx 自动按轮询策略分发:
-
location /或更精确路径下使用proxy_pass http://backend_servers; - 必须带上协议前缀
http://,否则会当成 FastCGI 或其他协议处理 - 建议加上基本代理头,避免后端获取不到真实客户端信息
常见配套配置:
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;
}
验证与生效
配置完成后不能直接生效,需手动检查并重载:
- 运行
nginx -t检查语法是否正确 - 确认无报错后执行
nginx -s reload(或systemctl reload nginx) - 可通过访问服务并观察各后端访问日志的请求分布,确认是否轮询生效
注意几个易错点
看似简单,但实际部署常因细节出问题:
- upstream 必须定义在
http块内,不能放在server或location里 -
proxy_pass后的 upstream 名称前后不能有空格,且末尾斜杠会影响路径重写逻辑 - 后端服务必须能被 Nginx 机器正常访问(网络连通、端口开放、防火墙放行)
- 若后端返回 502,优先排查后端是否启动、Nginx 是否能 telnet 通对应端口


















