Nginx负载均衡分发请求策略配置实操,新手也能快速上手

为什么需要 Nginx 负载均衡分发请求策略?

当你有多台后端服务器(比如两台 Web 应用服务器)时,Nginx 充当“交通指挥员”,把用户请求均匀地分给这些服务器,避免某一台过载崩溃。负载均衡分发请求策略决定了 Nginx 用什么样的规则来分配流量。
常见的策略有轮询、权重、IP 哈希等。
本文会手把手教你配置它们,让你从零开始就能驾驭。

准备工作:确认 Nginx 已安装并知道配置目录

在开始之前,确保你的服务器上安装了 Nginx(一般版本 1.18 以上均可)。
如果还没装,用以下命令安装(以 CentOS/Ubuntu 为例):

# CentOS
sudo yum install nginx -y

# Ubuntu
sudo apt update && sudo apt install nginx -y

安装后,Nginx 的配置目录一般在 /etc/nginx/,主配置文件是 nginx.conf
建议先备份原始文件:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

核心步骤:配置 upstream 和后端服务器组

Nginx 的负载均衡通过 upstream 模块实现。
你需要先定义一个服务器组,然后在 server 块中用 proxy_pass 把请求转发到这个组。

1. 编辑配置文件

用你熟悉的编辑器打开 /etc/nginx/nginx.conf,或者在 /etc/nginx/conf.d/ 下新建一个 .conf 文件(推荐单独文件便于管理)。
这里我们直接修改主配置文件做演示:

sudo vim /etc/nginx/nginx.conf

2. 在 http 块中添加上游服务器组

找到 http { } 部分,在其中添加如下内容(假设你有两台后端服务器 192.168.1.10 和 192.168.1.11,端口都是 8080):

upstream backend_servers {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

3. 配置代理转发

server 块(监听 80 端口)的 location / 中,写入:

location / {
    proxy_pass http://backend_servers;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

4. 检查配置并重启

sudo nginx -t           # 检查配置文件语法
sudo systemctl reload nginx   # 重新加载配置

如果没有报错,负载均衡已经工作了。
默认策略是轮询,即依次把请求分给每台服务器。

调整分发策略:权重、IP 哈希等

根据需要,你可以修改 upstream 块中的指令来改变分发规则。

权重策略

如果某个服务器性能更强,可以给它更高的权重:

upstream backend_servers {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=1;
}

此时 10 号服务器每收到 3 个请求,11 号才会收到 1 个。

IP 哈希策略

如果需要保持会话(比如用户登录后一直访问同一台服务器),用 IP 哈希:

upstream backend_servers {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

Nginx 会根据客户端 IP 计算哈希值,同一 IP 的请求始终发到同一台后端。

最少连接策略

将请求分给当前连接数最少的服务器:

upstream backend_servers {
    least_conn;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

避坑指南与高频问题解答

问题1:配置 reload 后没生效?

检查是否路径写错。
使用 sudo nginx -T 可以查看完整配置并检测错误。
另外,如果后端服务器没有启动,Nginx 会返回 502 错误。

问题2:权重 + IP 哈希能一起用吗?

不能。ip_hashleast_conn 等指令与 weight 不兼容(weightip_hash 下会被忽略)。
详细参考 Nginx 官方文档。

问题3:如何做到健康检查?

Nginx 开源版没有内置主动健康检查,但可以用 max_failsfail_timeout 被动标记故障服务器。
例如:

upstream backend_servers {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}

当某台连续失败 3 次,Nginx 会在 30 秒内不再向其转发请求。

避坑说明:upstream 名称不要与域名冲突

不要使用与真实域名相同的名称(例如 www.example.com),否则可能导致解析异常。
backendapp_servers 等描述性名称。

效果验证:看看请求是怎么分发的

你可以用 curl 多次访问 Nginx 地址,然后查看后端服务器的访问日志来确认分发情况。

# 假设 Nginx 监听本地 80 端口
for i in {1..6}; do curl -s http://localhost; done

如果后端服务器的日志(如 /var/log/nginx/access.log 或应用日志)显示 IP 交替出现,说明负载均衡正常工作。
你也可以在配置中给每台后端返回不同内容,通过对比响应体来判断。

如果你正在处理 Nginx 负载均衡分发请求策略,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
服务器多IP地址绑定配置教程:从零开始轻松上手
下一篇
Nginx缓存规则精细化配置:零基础也能快速上手的实战指南
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意