在阿里云 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,然后根据域名将请求转发到本地不同的端口。
网络相关配置要点:
-
监听端口:Nginx 主进程监听
0.0.0.0:80和0.0.0.0:443。 -
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; } } -
防火墙/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. 常见坑与排查清单
- DNS 解析:确保你的域名 A 记录指向的是该 ECS 的公网 IP(或 CNAME 指向 SLB)。如果是备案过的域名,必须在工信部完成 ICP 备案,否则阿里云会阻断 80/443 端口的访问(除非你走 443 且未备案,部分场景下可侥幸通过,但不合规且不稳定)。
- IPv6:如果你的 ECS 开启了 IPv6 支持,记得在安全组里也添加 IPv6 的入方向规则,否则仅能访问 IPv4。
- 云监控与日志:多站点意味着日志分散。建议在 Nginx 中为每个站点配置独立的 access.log 和 error.log,路径按域名区分,方便后续排查网络超时或 502 错误。
- DDoS 防护:如果站点面临较大流量风险,单纯靠安全组不够。建议开通阿里云 DDoS 基础防护(免费)或高防 IP,特别是在安全组之外再加一层清洗。
总结
配置多站点的“网络设置”本质上是:
- 安全组:只开 80/443 入方向,其他全关。
- DNS:所有域名解析到同一个 EIP。
- Web 服务器:用 Nginx 做基于域名的虚拟主机(Name-based Virtual Hosts),将不同域名反向XX到本地不同端口。
- 进阶:引入 SLB 实现流量分发和 SSL 卸载,提升稳定性和安全性。
别在操作系统内核参数上折腾,绝大多数问题出在安全组规则漏配、Nginx proxy_pass 写错、或者没做 ICP 备案导致端口被阿里云后台屏蔽。
云技术博客