我有一台主服务器,如何再加2台弹性服务器,并进行反向代理,有没有具体的步骤文档进行参考

阿里云服务器

这是一个非常典型的负载均衡和高可用架构部署方案。将您的主服务器作为核心应用,通过反向代理(如 Nginx)将流量分发到两台弹性服务器上,可以显著提升系统的性能、可靠性和可扩展性。

以下是详细的部署步骤文档,您可以根据实际情况进行调整:


目标架构

公网用户
    |
    |
[负载均衡器 (Nginx 反向代理)]
    |
    | (内网流量)
    |
    ├── [弹性服务器 1] (运行您的应用)
    ├── [弹性服务器 2] (运行您的应用)
    └── [主服务器] (可选:运行应用或作为管理/数据库服务器)

说明:通常,反向代理服务器会部署在一台独立的服务器上。您可以选择:

  1. 方案A:在您的“主服务器”上同时安装 Nginx 和您的应用。

  2. 方案B:将“主服务器”专门用作反向代理服务器,其本身不运行应用,只负责转发流量。

推荐方案B,这样主服务器(反向代理)的负载更低,更稳定,也更容易维护。以下步骤按方案B进行说明。


详细部署步骤

第一步:环境准备

  1. 服务器规划

    • 服务器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访问。

  2. 在服务器B和C上部署应用

    • 在两台弹性服务器上,使用相同的代码、配置和数据库连接信息部署您的应用。

    • 启动应用,确保它们都能在各自的服务器上通过 curl http://localhost:3000 正常访问。

    • 防火墙:确保服务器B和C的防火墙(如 ufw, firewalld 或云平台安全组)已开放端口 3000,并且只允许来自主服务器(x.x.x.x)的内网IP访问,以保证安全。

第二步:在主服务器上安装和配置 Nginx

  1. 安装 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
  2. 启动并启用 Nginx

    sudo systemctl start nginx
    sudo systemctl enable nginx

    访问 http://x.x.x.x,您应该能看到 Nginx 的欢迎页面。

  3. 配置反向代理

    • 备份默认配置:

      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/;
          # }
      }
  4. 测试 Nginx 配置

    sudo nginx -t

    如果看到 syntax is oktest is successful,说明配置正确。

  5. 重启 Nginx

    sudo systemctl restart nginx

第三步:验证和测试

  1. 直接测试后端服务器: 在主服务器上,执行:

    curl http://10.0.0.2:3000
    curl http://10.0.0.3:3000

    确保都能返回您的应用内容。

  2. 通过反向代理测试: 在您的本地电脑上,打开浏览器访问 http://x.x.x.x (主服务器的公网IP)。

    • 您应该能看到您的应用正常加载。

    • 刷新页面多次,Nginx 会使用轮询策略,请求会在两台弹性服务器之间交替。

  3. 检查日志

    • 查看 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 反向代理的负载均衡系统了。