这是一个非常典型的负载均衡和高可用架构部署方案。将您的主服务器作为核心应用,通过反向代理(如 Nginx)将流量分发到两台弹性服务器上,可以显著提升系统的性能、可靠性和可扩展性。
以下是详细的部署步骤文档,您可以根据实际情况进行调整:
目标架构
公网用户 | | [负载均衡器 (Nginx 反向代理)] | | (内网流量) | ├── [弹性服务器 1] (运行您的应用) ├── [弹性服务器 2] (运行您的应用) └── [主服务器] (可选:运行应用或作为管理/数据库服务器)
说明:通常,反向代理服务器会部署在一台独立的服务器上。您可以选择:
方案A:在您的“主服务器”上同时安装 Nginx 和您的应用。
方案B:将“主服务器”专门用作反向代理服务器,其本身不运行应用,只负责转发流量。
推荐方案B,这样主服务器(反向代理)的负载更低,更稳定,也更容易维护。以下步骤按方案B进行说明。
详细部署步骤
第一步:环境准备
服务器规划:
服务器A (主服务器):公网IP
x.x.x.x,安装 Nginx 作为反向代理。服务器B (弹性服务器1):内网IP
10.0.0.2,运行您的应用,监听端口3000。服务器C (弹性服务器2):内网IP
10.0.0.3,运行您的应用,监听端口3000。确保网络互通:三台服务器必须在同一个内网(或VPC)中,可以互相通过内网IP访问。
在服务器B和C上部署应用:
在两台弹性服务器上,使用相同的代码、配置和数据库连接信息部署您的应用。
启动应用,确保它们都能在各自的服务器上通过
curl http://localhost:3000正常访问。防火墙:确保服务器B和C的防火墙(如
ufw,firewalld或云平台安全组)已开放端口3000,并且只允许来自主服务器(x.x.x.x)的内网IP访问,以保证安全。
第二步:在主服务器上安装和配置 Nginx
安装 Nginx:
Ubuntu/Debian:
sudo apt update sudo apt install nginx -y
CentOS/RHEL:
sudo yum install epel-release -y sudo yum install nginx -y # 或者使用 dnf sudo dnf install nginx -y
启动并启用 Nginx:
sudo systemctl start nginx sudo systemctl enable nginx
访问
http://x.x.x.x,您应该能看到 Nginx 的欢迎页面。配置反向代理:
备份默认配置:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
编辑配置文件:
sudo nano /etc/nginx/sites-available/default
将文件内容替换为以下配置:
# 定义一个名为 'backend' 的上游服务器组 upstream backend { # 使用轮询 (round-robin) 策略分发请求 server 10.0.0.2:3000; server 10.0.0.3:3000; # 可选:添加健康检查 # server 10.0.0.2:3000 max_fails=3 fail_timeout=30s; # server 10.0.0.3:3000 max_fails=3 fail_timeout=30s; } server { listen 80; server_name your-domain.com; # 将 your-domain.com 替换为您的实际域名,或留空 # 根路径的处理 location / { # 将请求代理到 upstream 定义的服务器组 proxy_pass http://backend; # 以下配置确保代理能正确传递客户端信息 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; 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_cache_bypass $http_upgrade; } # 可选:为静态文件提供服务(如果您的应用有静态资源) # location /static/ { # alias /path/to/your/static/files/; # } }测试 Nginx 配置:
sudo nginx -t
如果看到
syntax is ok和test is successful,说明配置正确。重启 Nginx:
sudo systemctl restart nginx
第三步:验证和测试
直接测试后端服务器: 在主服务器上,执行:
curl http://10.0.0.2:3000 curl http://10.0.0.3:3000
确保都能返回您的应用内容。
通过反向代理测试: 在您的本地电脑上,打开浏览器访问
http://x.x.x.x(主服务器的公网IP)。您应该能看到您的应用正常加载。
刷新页面多次,Nginx 会使用轮询策略,请求会在两台弹性服务器之间交替。
检查日志:
查看 Nginx 访问日志,确认请求被成功代理:
sudo tail -f /var/log/nginx/access.log
查看 Nginx 错误日志,排查问题:
sudo tail -f /var/log/nginx/error.log
第四步:高级配置(可选)
HTTPS:使用 Let's Encrypt 的
certbot为您的域名配置免费的SSL证书,将listen 80;改为listen 443 ssl;,并添加证书路径。负载均衡策略:
upstream块中可以使用ip_hash(根据客户端IP哈希,实现会话保持) 或least_conn(转发到连接数最少的服务器)。健康检查:配置更完善的健康检查机制,自动剔除故障服务器。
高可用反向代理:为了实现真正的高可用,可以部署两台主服务器(都运行 Nginx),并使用 Keepalived 或云平台的负载均衡器来管理它们的VIP(虚拟IP)。
参考文档
Nginx 官方文档 - 反向代理:https://www.nginx.com/resources/glossary/reverse-proxy-server/
Nginx 官方文档 - 负载均衡:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
Let's Encrypt & Certbot (配置HTTPS):https://certbot.eff.org/
按照以上步骤操作,您就可以成功搭建一个基于 Nginx 反向代理的负载均衡系统了。