在阿里云 ECS 上部署多站点,核心逻辑其实和你在本地搭建 LAMP/LNMP 环境是一样的:一个 Web 服务器软件(如 Nginx/Apache)通过配置虚拟主机(Virtual Host)来区分不同的域名请求。
阿里云这边主要涉及两个层面的工作:一是网络与资源层(IP、安全组),二是应用配置层(Web 服务器配置)。下面我把步骤拆解清楚,按实际操作流程走。
第一步:基础资源准备
-
弹性公网 IP (EIP)
- 确保你的 ECS 实例绑定了 EIP。如果没绑定,去控制台申请并关联。
- 注意:默认情况下,一台 ECS 只能绑定一个公网 IP。如果你需要多个独立 IP 对应不同站点,你需要额外购买 EIP 并通过“辅助弹性网卡”或“ENI”的方式绑定到同一台 ECS 上(这属于进阶操作,大多数情况共用一个 IP 即可,靠域名区分)。
-
域名解析 (DNS)
- 登录阿里云云解析 DNS 控制台。
- 为每个站点添加 A 记录,指向你的 ECS 公网 IP。
- 例如:
www.site1.com->1.2.3.4,blog.site2.com->1.2.3.4。 - 关键点:所有站点的域名必须解析到同一个 IP,后续靠 Web 服务器的
ServerName来分流。
-
安全组设置
- 检查 ECS 的安全组规则,确保 80 (HTTP) 和 443 (HTTPS) 端口对
0.0.0.0/0开放。这是最常见的新手坑,导致网站打不开。
- 检查 ECS 的安全组规则,确保 80 (HTTP) 和 443 (HTTPS) 端口对
第二步:安装 Web 服务器
推荐使用 Nginx,因为它轻量、高性能,且配置语法清晰。Apache 也可以,但配置相对繁琐。
以 CentOS 7/8 或 Ubuntu 为例:
# CentOS
yum install nginx -y
systemctl start nginx
systemctl enable nginx
# Ubuntu
apt update
apt install nginx -y
systemctl start nginx
systemctl enable nginx
第三步:创建站点目录结构
为了管理方便,建议按照以下结构组织文件:
/var/www/
├── site1.com/
│ └── html/ # 站点1的根目录
├── site2.com/
│ └── html/ # 站点2的根目录
└── logs/ # 日志目录
执行命令创建目录并赋予权限:
mkdir -p /var/www/site1.com/html
mkdir -p /var/www/site2.com/html
# 将所有权交给 www-data (Ubuntu) 或 nginx (CentOS)
chown -R www-data:www-data /var/www/site1.com/html
chown -R www-data:www-data /var/www/site2.com/html
在每个目录下放一个简单的 index.html 测试文件,内容区分开,比如“Site 1 Home”和“Site 2 Home”。
第四步:配置 Nginx 虚拟主机(核心步骤)
Nginx 的配置通常在 /etc/nginx/sites-available/(Ubuntu)或 /etc/nginx/conf.d/(CentOS)下。我们以 Ubuntu 为例,采用“启用符号链接”的标准做法。
1. 创建站点1的配置
编辑文件 /etc/nginx/sites-available/site1.com:
server {
listen 80;
server_name www.site1.com site1.com;
root /var/www/site1.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 日志记录,便于排查问题
access_log /var/log/nginx/site1.access.log;
error_log /var/log/nginx/site1.error.log;
}
2. 创建站点2的配置
编辑文件 /etc/nginx/sites-available/site2.com:
server {
listen 80;
server_name www.site2.com site2.com;
root /var/www/site2.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/site2.access.log;
error_log /var/log/nginx/site2.error.log;
}
3. 启用站点
创建符号链接到 sites-enabled 目录:
ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/site1.com
ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/site2.com
4. 测试并重载配置
# 测试配置文件语法是否正确
nginx -t
# 如果显示 syntax is ok,则重载服务
systemctl reload nginx
此时,访问两个域名应该能看到各自对应的 index.html 内容。
第五步:配置 HTTPS(SSL 证书)
现在 HTTP 能通了,但现代浏览器会标记 HTTP 为“不安全”,强烈建议配置 HTTPS。
-
获取证书:
- 可以在阿里云 SSL 证书服务中购买免费或付费证书。
- 或者使用 Let’s Encrypt + Certbot 免费获取(推荐,自动化程度高)。
-
使用 Certbot 自动配置(以 Ubuntu 为例):
apt install certbot python3-certbot-nginx certbot --nginx -d www.site1.com -d site1.com certbot --nginx -d www.site2.com -d site2.comCertbot 会自动修改 Nginx 配置文件,添加 SSL 监听、重定向 HTTP 到 HTTPS,并设置自动续期。
如果你手动配置,需要在
server块中添加:server { listen 443 ssl http2; server_name www.site1.com site1.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # ... 其他原有配置 ... }同时建议添加一个强制跳转 HTTPS 的 80 端口 Server 块:
server { listen 80; server_name www.site1.com site1.com; return 301 https://$host$request_uri; }
第六步:常见问题与优化建议
-
PHP-FPM 支持:
- 如果你的站点是 PHP 项目(如 WordPress),需要在 Nginx 配置中添加
fastcgi_pass unix:/run/php/php-fpm.sock;等 FastCGI 相关配置。 - 确保安装了 PHP 和 php-fpm,并且版本匹配。
- 如果你的站点是 PHP 项目(如 WordPress),需要在 Nginx 配置中添加
-
性能调优:
- 在
/etc/nginx/nginx.conf中调整worker_processes为auto。 - 根据 ECS 配置调整
client_max_body_size(上传文件大小限制)。
- 在
-
备份与监控:
- 利用阿里云的“快照”功能定期备份系统盘和数据盘。
- 开启云监控插件,关注 CPU、内存和网络带宽使用情况。
-
防火墙:
- 除了阿里云控制台的安全组,ECS 内部也可能有
firewalld或ufw。确保内部防火墙也放行了 80/443 端口。
- 除了阿里云控制台的安全组,ECS 内部也可能有
-
数据库分离(可选进阶):
- 初期所有站点共用同一台机器的 MySQL 没问题。
- 当站点增多或流量变大时,考虑将 MySQL 迁移到阿里云 RDS,实现计算与存储分离,提升稳定性和扩展性。
总结
流程就是:买 ECS -> 配 DNS -> 装 Nginx -> 写配置文件(区分域名)-> 配 SSL -> 重载生效。
整个过程不需要特殊的阿里云 API 操作,本质上是标准的 Linux 运维技能。只要 DNS 解析正确、安全组端口放行、Nginx 配置无误,多站点部署就能顺利完成。
云技术博客