手动在 Nginx 中搭建跨云服务商负载均衡

在 Nginx 中搭建跨云服务商(腾讯云 A 服务器作为负载均衡器,阿里云 B 和 C 服务器作为后端)的负载均衡,需通过配置upstream模块和反向代理实现。以下是具体步骤和注意事项:


1. 基础架构设计

  • A 服务器(腾讯云):作为主负载均衡器,接收所有外部请求并分发到后端服务器。

  • B、C 服务器(阿里云):运行相同的应用服务,处理实际请求。

  • 域名解析:将域名(如example.com)解析到 A 服务器的公网 IP。


2. Nginx配置(A服务器)

在 A 服务器的nginx.conf中配置upstream和反向代理规则:

http {
    upstream backend_servers {
        # 阿里云服务器IP和端口
        server <B服务器公网IP>:80 weight=1;
        server <C服务器公网IP>:80 weight=1;
        # 可选:配置健康检查参数
        server <B服务器公网IP>:80 max_fails=2 fail_timeout=30s;
        server <C服务器公网IP>:80 max_fails=2 fail_timeout=30s;
    }

    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_next_upstream error timeout http_500 http_502 http_503;
        }
    }
}

关键配置说明

  • upstream:定义后端服务器集群,支持跨云 IP(需确保 B、C 服务器的防火墙允许 A 服务器的访问)。

  • weight:权重分配,性能不均时可调整。

  • max_failsfail_timeout:自动剔除故障节点。

  • proxy_next_upstream:定义请求失败时的重试条件。


3. 后端服务器配置(B、C服务器)

确保 B、C 服务器的 Nginx 配置相同,监听 80 端口并处理请求:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

注意:若需区分请求来源,可在 B、C 服务器的页面中添加标识(如“B 服务器响应”)。


4. 跨云网络与安全配置

  • 防火墙规则

    • A 服务器:开放 80 端口(HTTP)和 443 端口(HTTPS)。

    • B、C 服务器:仅允许 A 服务器的公网 IP 访问 80 端口。

  • 延迟优化:若跨云延迟较高,可启用keepalive长连接:

    upstream backend_servers {
        keepalive 32;  # 复用连接数
        server <B服务器IP>:80;
        server <C服务器IP>:80;
    }

5. 测试与验证

  1. 域名解析:将example.com解析到 A 服务器的 IP。

  2. 请求分发测试

    • 多次访问example.com,观察响应是否轮询到 B、C 服务器。

    • 手动关闭 B 服务器,验证请求是否全部由 C 处理(故障转移)。

  3. 性能监控:使用nginx -t检查配置,并通过日志分析请求分发情况。


6. 高级配置(可选)

  • 会话保持:使用ip_hash确保同一用户访问固定后端:

    upstream backend_servers {
        ip_hash;
        server <B服务器IP>:80;
        server <C服务器IP>:80;
    }
  • 动态扩展:结合云厂商的 API 动态更新upstream列表(需脚本实现)。


常见问题

  • 跨云延迟:若 B、C 服务器响应慢,可调整proxy_connect_timeout(默认 60 秒)。

  • HTTPS 支持:在 A 服务器配置 SSL 证书,并转发 HTTPS 请求到后端的 HTTP。

通过以上步骤,即可实现腾讯云与阿里云服务器的跨云负载均衡。如需更复杂的策略(如基于响应时间的fair算法),需安装第三方 Nginx 模块。


手动在 Nginx 中搭建跨云服务商负载均衡
https://uniomo.com/archives/shou-dong-zai-nginx-zhong-da-jian-kua-yun-fu-wu-shang-fu-zai-jun-heng
作者
雨落秋垣
发布于
2025年09月08日
许可协议