Nginx负载均衡从零开始配置教程
为什么需要 Nginx 负载均衡
当一台服务器扛不住高并发,或者想实现高可用,Nginx 负载均衡 就是最常用的方案。
它可以把用户请求均匀分发给后端多台真实服务器,既提升性能又避免单点故障。
本文会带零基础的朋友一步步完成配置。
配置前需要准备的几样东西
- 一台已经安装好 Nginx 的服务器(操作系统不限,本文以 CentOS 7 为例)
- 至少两台后端应用服务器(可以是本机不同端口,例如 8081 和 8082)
- 后端服务已正常启动并能独立访问(比如用
curl http://127.0.0.1:8081能返回内容)
如果没有多台机器,完全可以在同一台服务器上启动两个不同端口的 web 服务来做测试。
手把手配置 Nginx 负载均衡
1. 找到并编辑 Nginx 主配置文件
默认路径是 /etc/nginx/nginx.conf,也可以用 nginx -t 查看当前使用的配置路径。
备份原文件后,用 vim 或 nano 打开:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
vim /etc/nginx/nginx.conf
2. 在 http 块内添加 upstream 定义
在 http { } 大括号内部,server 块之前,添加如下内容:
upstream my_backend {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
# 这里可以继续添加更多后端
}
upstream 后面的名字(这里是 my_backend)可以自己取,后续 proxy_pass 里会引用。
每个 server 后面就是后端地址和端口,weight 表示权重,数值越大分到的请求越多。
3. 修改 server 块中的 location 指向 upstream
找到你实际提供服务的 server 块,通常默认的 server 监听 80 端口。
把原来的 proxy_pass 或 root 改成下面这样:
location / {
proxy_pass http://my_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;
}
这里用 proxy_pass http://my_backend 把请求转发到刚才定义的 upstream 组,Nginx 会自动按轮询(默认算法)或权重分发。
4. 检查配置并重启 Nginx
nginx -t # 测试语法是否正确
systemctl restart nginx # CentOS 7 重启命令
# 如果是其他系统,用 nginx -s reload 也行
如果 nginx -t 提示 syntax is ok 和 test is successful,说明配置没问题。
配置中的高频问题与避坑
- 后端服务器没启动:
502 Bad Gateway最常见原因。务必先用curl确认后端地址能直接访问。 - upstream 名字拼写错误:
proxy_pass后面的地址必须和upstream名称完全一致,包括大小写。 - 防火墙未放行端口:检查后端端口是否开放,用
telnet 127.0.0.1 8081测试连通性。 - 日志定位问题:查看
/var/log/nginx/error.log,错误信息会直接给出线索。
如果想让某一台服务器承担更多请求,可以调整 weight 值,例如 weight=3。
如果需要会话保持(session sticky),可以使用 ip_hash 指令,在 upstream 块内添加一行:
upstream my_backend {
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
如何验证 Nginx 负载均衡生效
最简单的方法是准备两台后端服务器,返回不同的内容(比如在首页分别写入 "Server A" 和 "Server B")。
然后用浏览器或 curl 多次访问 Nginx 代理端口:
for i in {1..10}; do curl http://你的服务器IP; done
如果看到不同服务器的响应交替出现,说明 Nginx 负载均衡配置成功。
也可以用 curl -I 查看响应头里的 Server 字段来确认。
Nginx 负载均衡 配置并不复杂,关键是理解 upstream 和 proxy_pass 的配合。
按照本文的步骤一步步操作,即使零基础也能顺利跑起来。
如果遇到异常,优先检查后端服务状态和 Nginx 错误日志,大多数问题都能快速定位。