努力
加油

阿里云ECS配置多站点时需要修改哪些网络设置?

在阿里云 ECS 上配置多站点,核心难点其实不在“代码怎么写”,而在网络层的流量分发和端口映射。很多新手容易把 Nginx/Apache 的反向XX配置和网络层的安全组、负载均衡搞混。

要稳定、安全地跑多个站点(比如 a.com 和 b.com),你需要从以下三个层面调整网络设置:

1. 安全组(Security Group):入口的第一道门

这是最基础也是最容易被忽视的一步。阿里云默认只开放了 SSH (22) 和部分常见端口。如果你要在同一台 ECS 上跑多个 Web 服务,必须确保入方向规则允许对应的 HTTP/HTTPS 流量进入。

  • 最小化原则:不要为了省事直接开 0.0.0.0/0 的所有端口。
  • 具体操作:
    • 添加一条入方向规则:协议选择 TCP,端口范围填 80(HTTP)。
    • 添加一条入方向规则:协议选择 TCP,端口范围填 443(HTTPS)。
    • 关键点:如果你的后端服务监听了非标准端口(比如 Node.js 跑在 3000,Python 跑在 8000),不需要在安全组开放这些内部端口。因为外部流量是通过 80/443 进来,再由 Nginx/Apache 转发到内部端口的。直接在安全组开放 3000/8000 是巨大的安全隐患。

2. 弹性公网 IP(EIP)与带宽复用

一台 ECS 通常绑定一个公网 IP。对于多站点来说,IP 地址本身不需要修改,所有域名解析都指向同一个 EIP。

  • 带宽瓶颈:如果多个站点并发量大,单条 ECS 的固定带宽(如 5Mbps)可能成为瓶颈。这时候考虑升级带宽或开启“按使用流量计费”更划算。
  • SNAT/DNAT:一般情况不需要手动配置 NAT 网关,只要安全组放行,DNS 解析正确,流量就能直达。

3. 应用层反向XX(真正的“多站点”核心)

这才是你真正需要“修改”的地方。操作系统层面只需要监听 80 和 443,然后由 Web 服务器根据 Host 头将请求分发给不同的后端进程。

方案 A:单机 Nginx 反向XX(推荐,资源利用率高)

这是最经典的做法。Nginx 作为前端入口,监听 80/443,然后根据域名将请求转发到本地不同的端口。

网络相关配置要点:

  1. 监听端口:Nginx 主进程监听 0.0.0.0:80 和 0.0.0.0:443。

  2. Server Block 配置:

    server {
        listen 80;
        server_name a.com www.a.com;
        location / {
            proxy_pass http://127.0.0.1:3000; # 转发给 Node.js 应用
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
    server {
        listen 80;
        server_name b.com www.b.com;
        location / {
            proxy_pass http://127.0.0.1:8080; # 转发给 Java/Spring Boot 应用
            proxy_set_header Host $host;
        }
    }
  3. 防火墙/SELinux:确保 Linux 系统内部的防火墙(如 firewalld 或 iptables)没有拦截 Nginx 对本地回环地址(127.0.0.1)的连接。通常 localhost 通信不受外部防火墙限制,但 SELinux 可能会拦截,需检查上下文策略。

方案 B:使用阿里云 SLB(应用型负载均衡 ALB/NLB)

如果你的站点数量较多,或者对高可用有要求,强烈建议将 ECS 放在 SLB 后面。

  • 网络架构变化:
    • 用户 -> 阿里云 SLB 公网 IP -> 后端 ECS 集群。
    • SLB 监听 80/443,后端服务器组指向 ECS 的内网 IP + 对应应用的端口(如 3000, 8080)。
  • 优势:
    • 解耦:ECS 不再直接暴露公网 IP,安全性更高。
    • SSL 卸载:可以在 SLB 层统一终止 HTTPS,减轻 ECS CPU 负担。
    • 多实例扩展:未来加机器只需添加到后端服务器组,无需改 DNS 或 SLB 监听规则。

4. 常见坑与排查清单

  1. DNS 解析:确保你的域名 A 记录指向的是该 ECS 的公网 IP(或 CNAME 指向 SLB)。如果是备案过的域名,必须在工信部完成 ICP 备案,否则阿里云会阻断 80/443 端口的访问(除非你走 443 且未备案,部分场景下可侥幸通过,但不合规且不稳定)。
  2. IPv6:如果你的 ECS 开启了 IPv6 支持,记得在安全组里也添加 IPv6 的入方向规则,否则仅能访问 IPv4。
  3. 云监控与日志:多站点意味着日志分散。建议在 Nginx 中为每个站点配置独立的 access.log 和 error.log,路径按域名区分,方便后续排查网络超时或 502 错误。
  4. DDoS 防护:如果站点面临较大流量风险,单纯靠安全组不够。建议开通阿里云 DDoS 基础防护(免费)或高防 IP,特别是在安全组之外再加一层清洗。

总结

配置多站点的“网络设置”本质上是:

  1. 安全组:只开 80/443 入方向,其他全关。
  2. DNS:所有域名解析到同一个 EIP。
  3. Web 服务器:用 Nginx 做基于域名的虚拟主机(Name-based Virtual Hosts),将不同域名反向XX到本地不同端口。
  4. 进阶:引入 SLB 实现流量分发和 SSL 卸载,提升稳定性和安全性。

别在操作系统内核参数上折腾,绝大多数问题出在安全组规则漏配、Nginx proxy_pass 写错、或者没做 ICP 备案导致端口被阿里云后台屏蔽。