负载均衡是一种网络技术,用于分散单一服务器的压力,从而提高网站的性能和可用性。Nginx 是一款流行的 Web 服务器和反向代理服务器,可以非常有效地用作负载均衡器。
环境准备
已经安装了 Nginx,并且有以下几台服务器:
- 前端服务器 (Nginx):负责接收客户端请求,并将请求分发到后端服务器。
- 后端服务器 (Web 应用):处理实际业务逻辑。
将使用以下配置:
- 前端 Nginx 服务器 IP 地址:192.168.1.100
- 后端服务器 IP 地址:
- 192.168.1.101:8080
- 192.168.1.102:8080
- 192.168.1.103:8080
步骤 1: 配置 Nginx
打开 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/
下的一个单独的配置文件中。
基础配置
首先,定义一个 upstream
块来指定后端服务器池:
nginx
upstream backend_servers {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
接下来,在 server
块中配置负载均衡规则:
nginx
server {
listen 80;
server_name example.com;
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
这段配置指定了监听端口、域名以及如何将请求转发到后端服务器。proxy_pass
指令指向了前面定义的 upstream
名称。
高级配置
负载均衡算法
Nginx 支持多种负载均衡算法,包括:
- 轮询(默认):简单地按顺序将请求分发给后端服务器。
- 最少连接数:将请求分发给当前连接数最少的服务器。
- IP 哈希:根据客户端 IP 地址进行哈希,然后分配给特定的后端服务器,以保持会话的一致性。
例如,要使用最少连接数算法,可以在 upstream
块中添加 least_conn
:
nginx
upstream backend_servers {
least_conn;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
故障转移
可以指定某些服务器作为备用服务器,当主服务器出现问题时,Nginx 会自动将请求发送到备用服务器:
nginx
upstream backend_servers {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080 backup;
}
健康检查
可以配置 Nginx 自动检查后端服务器的状态,以确保不会将请求发送到故障服务器:
nginx
upstream backend_servers {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080 max_fails=3 fail_timeout=30s;
}
这里,如果服务器连续失败 3 次,则在接下来的 30 秒内不再接受任何请求。
步骤 2: 重启 Nginx
保存配置文件后,需要重新加载 Nginx 使新配置生效:
bash
sudo systemctl reload nginx
测试负载均衡
现在可以通过浏览器访问 http://example.com
并观察请求是如何被分发到不同的后端服务器上的。