在阿里云ECS上配置多个虚拟主机(Virtual Hosts)运行不同域名,通常是在Web服务器(如 Apache 或 Nginx)中通过 基于名称的虚拟主机 实现。以下是详细步骤:
✅ 前提条件
- 已有一台阿里云ECS实例(Linux系统,如 CentOS、Ubuntu)。
- 已安装 Web 服务器(Apache 或 Nginx)。
- 已购买并备案多个域名,并将它们的 DNS 解析指向 ECS 的公网 IP。
- 安全组已开放 HTTP(80端口)和 HTTPS(443端口)。
方法一:使用 Nginx 配置多虚拟主机(推荐)
步骤 1:安装 Nginx(以 Ubuntu 为例)
sudo apt update
sudo apt install nginx -y
步骤 2:创建网站目录结构
为每个域名创建独立的网站根目录:
sudo mkdir -p /var/www/site1.com/html
sudo mkdir -p /var/www/site2.com/html
# 创建测试页面
echo "<h1>Welcome to site1.com</h1>" | sudo tee /var/www/site1.com/html/index.html
echo "<h1>Welcome to site2.com</h1>" | sudo tee /var/www/site2.com/html/index.html
# 设置权限
sudo chown -R www-data:www-data /var/www
步骤 3:创建虚拟主机配置文件
Nginx 配置文件通常位于 /etc/nginx/sites-available/。
创建 site1.com 的配置
sudo nano /etc/nginx/sites-available/site1.com
内容如下:
server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
创建 site2.com 的配置
sudo nano /etc/nginx/sites-available/site2.com
server {
listen 80;
server_name site2.com www.site2.com;
root /var/www/site2.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
步骤 4:启用站点(创建符号链接)
sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/
⚠️ 可删除默认站点避免冲突:
sudo rm /etc/nginx/sites-enabled/default
步骤 5:测试配置并重启 Nginx
sudo nginx -t # 测试配置是否正确
sudo systemctl reload nginx # 重新加载配置
方法二:使用 Apache 配置多虚拟主机
步骤 1:安装 Apache
sudo apt update
sudo apt install apache2 -y
步骤 2:创建网站目录
sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html
echo "<h1>Site1.com Home</h1>" | sudo tee /var/www/site1.com/public_html/index.html
echo "<h1>Site2.com Home</h1>" | sudo tee /var/www/site2.com/public_html/index.html
步骤 3:创建虚拟主机配置文件
sudo nano /etc/apache2/sites-available/site1.com.conf
内容:
<VirtualHost *:80>
ServerName site1.com
ServerAlias www.site1.com
DocumentRoot /var/www/site1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>
同样创建 site2.com.conf。
步骤 4:启用站点并重启 Apache
sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf
sudo systemctl reload apache2
✅ 域名解析设置(DNS)
登录你的域名注册商或阿里云控制台:
- 进入「域名解析」管理页面。
- 添加 A 记录,将每个域名指向 ECS 的公网 IP:
| 记录类型 | 主机记录 | 记录值(IP) |
|---|---|---|
| A | @ | 公网IP |
| A | www | 公网IP |
示例:
site1.com→A→123.123.123.123
www.site1.com→A→123.123.123.123
✅ 验证配置
在浏览器中分别访问:
- http://site1.com
- http://site2.com
应看到各自对应的页面。
🔐 可选:为每个站点配置 HTTPS(SSL证书)
推荐使用 Let’s Encrypt + Certbot:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d site1.com -d www.site1.com
Certbot 会自动修改 Nginx 配置并重定向到 HTTPS。
🛡️ 注意事项
- 备案问题:中国大陆地区域名必须完成 ICP 备案才能访问。
- 防火墙:确保 ECS 安全组放行 80 和 443 端口。
- SELinux/AppArmor:某些系统需调整安全策略。
- 日志监控:定期查看日志排查问题。
✅ 总结:
通过 Nginx/Apache 的虚拟主机功能,结合正确的 DNS 解析和目录结构,即可在一台阿里云 ECS 上运行多个不同域名的网站。Nginx 因其高性能和简洁配置更受现代开发者青睐。
如有需要,可进一步使用 Docker 或反向X_X实现更复杂的架构。
云小栈