服务器负载均衡Nginx:小白也能懂的Nginx负载均衡配置
如果你有多台后端服务器,想让流量均匀分担、提高稳定性,那 服务器负载均衡Nginx 是最常用的方案之一。
本文从零开始,带你一步步配置完成。
前置准备
- 一台安装好 Linux(如 CentOS 7/8 或 Ubuntu 20.04+)的服务器,已安装 Nginx。
- 至少两台后端业务服务器(可以是同一台机器上的不同端口,例如 8080 和 8081),确保它们能正常响应 HTTP 请求。
- 确认 Nginx 已安装:
nginx -v,如果未安装,执行:
# CentOS
yum install nginx -y
Ubuntu/Debian
apt install nginx -y
- 如果使用宝塔面板,登录后台,在“软件商店”确保 Nginx 已安装并运行。
分步操作
1. 准备后端服务
在本地测试时,可以用 Python 快速启动两个简单 HTTP 服务器:
# 终端1(端口 8080)
python3 -m http.server 8080 --directory /tmp/site1
终端2(端口 8081)
python3 -m http.server 8081 --directory /tmp/site2
如果不会 Python,直接用你的 Web 服务器(Apache、Tomcat等)监听不同端口也可以。
2. 编辑 Nginx 配置文件
Nginx 主配置文件通常在 /etc/nginx/nginx.conf,也可以新建一个独立文件放在 /etc/nginx/conf.d/ 目录下(推荐)。
新建一个配置文件,例如 load_balance.conf:
sudo vi /etc/nginx/conf.d/load_balance.conf粘贴以下内容:
upstream backend {
轮询(默认)方式,把请求分发给下面两台服务器
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
server {
listen 80;
server_name example.com; # 替换为你的域名或IP
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream backend定义了一个后端服务器组,这里用了默认轮询算法。weight=1表示权重相同,可以根据服务器性能调整。proxy_pass将请求转发到backend组。
3. 检查配置并重载 Nginx
# 检查配置文件语法
sudo nginx -t
如果显示 syntax is ok 和 test is successful,则重载
sudo systemctl reload nginx # 或 sudo nginx -s reload
如果使用宝塔面板,
可以在“网站” -> “设置” -> “反向代理”中填入 127.0.0.1: 和
8080127.0.0.1:(但建议在配置文件中手动添加 upstream 更灵活)。
8081
避坑指南
- 后端服务器必须可用:如果其中一台挂了,Nginx 默认还会转发请求,导致502错误。建议在上游配置中添加健康检查(
max_fails=3 fail_timeout=30s)。示例:
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;- 端口被防火墙拦截:确保后端端口(8080,8081)在防火墙规则中放行,
firewall-cmd --zone=public --add-port=8080/tcp --permanent然后 reload。 - 代理头设置错误:如果后端程序依赖客户端IP,必须配置
proxy_set_header X-Real-IP $remote_addr;,否则所有请求来源都是 Nginx 服务器IP。 - 配置文件格式:upstream 块必须放在 server 块外面,否则会报错。
效果验证
方法一:浏览器或 curl 测试
# 连续请求多次,观察响应内容是否来自不同后端
curl http://你的服务器IP/如果两个后端返回的内容不同(例如不同页面的标题),你会交替看到它们。
方法二:查看 Nginx 日志
tail -f /var/log/nginx/access.log可以看到不同后端的响应状态,正常应都是200。
方法三:关掉一台后端测试
停止其中一台后端服务(例如杀掉 8080 端口的进程),再次请求,Nginx 会自动将流量全部转发给存活的服务器,业务不中断。
高频问题解答
- Q1:Nginx 负载均衡支持哪些算法?
A:主要有轮询(默认)、权重(weight)、IP哈希(ip_hash)、最少连接(least_conn)等。
在 upstream 块中添加 ip_hash; 可实现同一IP固定访问同一后端(适合需要Session保持的场景)。
- Q2:配置后访问出现 502 Bad Gateway 怎么办?
A:
先检查后端服务是否正常运行,
其次查看 Nginx 错误日志 tail -f /var/log/nginx/error.log,
通常是 connect() failed (111: 表示后端未启动,
Connection refused)
或 connect() failed (113: 表示网络不通。
No route to host)
- Q3:用宝塔面板如何配置 upstream?
A:
宝塔默认的 Nginx 配置不支持直接在 UI 中写 upstream,
需要进入“文件” -> /www/server/panel/vhost/nginx/ 下找到对应域名的 conf 文件,
手动添加 upstream 块(与 server 块同级),
然后保存重启 Nginx。
如果你正在处理 服务器负载均衡Nginx,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。