你是否遇到过这样的情况:当你的网站访问量突然增加时,单个服务器可能会因为负载过高而变慢甚至崩溃?这时候,负载均衡就能派上用场了。简单来说,负载均衡就是把用户的请求“分摊”到多台服务器上处理,避免某一台服务器压力过大,从而提升系统的整体性能和稳定性。
Nginx 作为一款高性能的 Web 服务器和反向代理工具,自带了强大的负载均衡模块,能轻松实现多服务器分流。接下来,我们用最简单的方式,一步步教你配置 Nginx 负载均衡。
一、负载均衡前的准备工作¶
在开始配置前,你需要先准备以下东西:
- 至少两台后端服务器:这些服务器需要运行相同的服务(比如都部署了你的 Web 应用),并且能正常响应请求。假设我们有两台服务器,IP 分别是
192.168.1.100:8080和192.168.1.101:8080(端口可根据实际情况修改)。 - 安装 Nginx:如果你的服务器还没安装 Nginx,可以参考官方文档快速安装。比如在 Ubuntu 系统中:
sudo apt update
sudo apt install nginx
(CentOS 系统用 sudo yum install nginx,其他系统参考Nginx 官方安装指南)
3. 确保后端服务器可访问:检查后端服务器的防火墙是否开放了对应的端口(比如 8080),并且能通过浏览器直接访问(例如访问 http://192.168.1.100:8080 能看到应用页面)。
二、Nginx 负载均衡的核心配置¶
Nginx 负载均衡的配置分为两步:定义后端服务器组和代理请求到服务器组。
1. 定义后端服务器组(upstream 模块)¶
在 Nginx 的主配置文件(通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf)中,添加一个 upstream 块,用来列出后端服务器并设置负载策略:
http {
# 定义后端服务器组,名称自定义(例如 my_server_group)
upstream my_server_group {
# 最简单的轮询策略:请求按顺序分配到后端服务器
server 192.168.1.100:8080;
server 192.168.1.101:8080;
# (可选)加权轮询:权重越高,分配到的请求越多
# server 192.168.1.100:8080 weight=2; # 权重 2,会比另一台多分配 2 倍请求
# server 192.168.1.101:8080 weight=1;
# (可选)健康检查:后端服务器故障后自动跳过
# server 192.168.1.100:8080 max_fails=2 fail_timeout=10s;
# max_fails:允许失败次数(默认 1),超过后标记为故障
# fail_timeout:故障后重试等待时间(默认 10s)
}
# 其他 Nginx 配置...
}
2. 配置代理到后端服务器组¶
在 Nginx 的 server 块中,配置反向代理,将用户请求代理到刚才定义的 upstream 组:
server {
listen 80; # Nginx 监听的端口(通常用 80 或 443)
server_name localhost; # 你的域名或服务器 IP
location / {
proxy_pass http://my_server_group; # 代理到后端服务器组
proxy_set_header Host $host; # 传递客户端请求的主机名
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP
}
}
关键说明:
- proxy_pass:必须指向 upstream 块的名称(如 http://my_server_group),而不是直接写后端服务器 IP。
- proxy_set_header:传递客户端信息到后端服务器,避免后端服务器获取不到真实的客户端 IP 和 Host。
三、验证配置是否生效¶
配置完成后,按以下步骤验证:
- 检查配置语法:在终端执行
nginx -t,如果显示syntax is ok和test is successful,说明配置语法正确。 - 重启 Nginx:执行
nginx -s reload(或systemctl restart nginx)让配置生效。 - 测试负载均衡:
- 打开浏览器,访问http://Nginx服务器IP(比如 Nginx 服务器的公网/内网 IP)。
- 多次刷新页面,观察页面内容是否来自不同的后端服务器(例如后端服务器返回的页面可能包含其自身 IP,或不同的内容)。
- 也可在后端服务器上查看日志,比如tail -f /var/log/后端服务器日志,确认请求是否被正确分发。
四、常见问题与解决方法¶
- 后端服务器无响应:检查后端服务器是否运行、端口是否开放、防火墙是否拦截请求。
- Nginx 启动失败:用
nginx -t检查配置错误,或查看 Nginx 错误日志(/var/log/nginx/error.log)。 - 所有请求发往一台服务器:确认
upstream块定义了多台服务器,且配置无语法错误。 - 后端服务器故障后仍有请求:配置
max_fails和fail_timeout(如max_fails=2 fail_timeout=10s),Nginx 会自动跳过故障服务器。
五、进阶:其他负载均衡策略¶
除了基础轮询,Nginx 还支持以下策略(按需选择):
- IP 哈希:根据客户端 IP 固定分配到同一台后端服务器(适合会话保持)。
upstream my_server_group {
ip_hash; # 添加此行启用 IP 哈希
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
- URL 哈希:根据请求 URL 分配服务器(需安装
ngx_http_upstream_hash_module模块)。
通过以上步骤,你已经成功实现了 Nginx 负载均衡,让多台服务器分担流量压力。后续可根据需求调整权重、添加 HTTPS 或配置更复杂的健康检查,进一步提升系统稳定性。