在阿里云服务器上配置多个网站虚拟主机,通常基于 Nginx 或 Apache Web 服务器实现。以下以 Nginx 为例(阿里轻量应用服务器和 ECS 默认常预装 Nginx),提供完整步骤;若使用 Apache,逻辑类似但配置文件不同,文末会简要说明。
✅ 前提条件
- 已购买阿里云 ECS 实例并登录(SSH 连接)
- 已安装 Nginx(如未安装:
sudo apt install nginx/yum install nginx) - 每个网站有独立的域名(已解析到服务器公网 IP)
- 各网站代码目录独立存放(如
/var/www/site1,/var/www/site2)
🛠️ 步骤详解(Nginx 多站点配置)
1️⃣ 创建网站目录与权限
# 创建两个示例网站目录
sudo mkdir -p /var/www/site1/html
sudo mkdir -p /var/www/site2/html
# 放置 index.html(测试用)
echo "<h1>Site 1</h1>" | sudo tee /var/www/site1/html/index.html
echo "<h1>Site 2</h1>" | sudo tee /var/www/site2/html/index.html
# 设置所有者为 www-data(Ubuntu/Debian)或 nginx(CentOS)
sudo chown -R www-data:www-data /var/www/site1
sudo chown -R www-data:www-data /var/www/site2
sudo chmod -R 755 /var/www
💡 CentOS/RHEL 用户请用
nginx:nginx代替www-data:www-data
2️⃣ 创建站点配置文件
在 /etc/nginx/sites-available/ 下为每个网站创建独立配置:
▶ 网站 1 配置(example1.com)
sudo nano /etc/nginx/sites-available/example1.com
填入以下内容(替换 example1.com 为你的实际域名):
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/site1/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 可选:启用 HTTPS(需先申请证书)
# listen 443 ssl;
# ssl_certificate /path/to/cert.pem;
# ssl_certificate_key /path/to/key.pem;
}
▶ 网站 2 配置(example2.com)
sudo nano /etc/nginx/sites-available/example2.com
内容类似,仅修改 server_name、root 路径等。
3️⃣ 启用站点(创建软链接)
# Ubuntu/Debian
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/
# CentOS/RHEL(无 sites-enabled 时可直接 include)
# 编辑主配置 /etc/nginx/nginx.conf,确保包含:
# include /etc/nginx/conf.d/*.conf;
# 然后将上述文件放入 /etc/nginx/conf.d/
✅ 验证语法:
sudo nginx -t
# 输出应含 "syntax is ok" 和 "test is successful"
4️⃣ 重启 Nginx 生效
sudo systemctl reload nginx # 推荐:平滑重载
# 或
sudo systemctl restart nginx
5️⃣ 防火墙与安全组配置(关键!)
- 阿里云控制台 → 安全组
确保入方向规则允许80(HTTP)和443(HTTPS)端口,来源设为0.0.0.0/0或指定 IP。 -
本地防火墙(如
ufw/firewalld)也需放行:# Ubuntu (ufw) sudo ufw allow 'Nginx Full' sudo ufw enable # CentOS (firewalld) sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
6️⃣ 域名解析验证
- 将
example1.com、example2.com的 A 记录指向你的服务器公网 IP(在阿里云 DNS 控制台操作)。 - 等待 TTL 生效后,访问
http://example1.com和http://example2.com应分别显示对应站点内容。
🔐 进阶建议
| 项目 | 建议 |
|---|---|
| HTTPS | 使用 Let’s Encrypt + certbot 免费证书(推荐 acme.sh 脚本自动化) |
| 日志隔离 | 在每个 server 块中配置 access_log / error_log 指向独立文件 |
| 性能优化 | 启用 Gzip、静态资源缓存、CDN 提速 |
| 备份 | 定期备份 /etc/nginx 配置与网站数据 |
📌 若使用 Apache
- 主配置:
/etc/apache2/sites-available/ - 启用站点:
a2ensite site1.conf - 模板示例:
<VirtualHost *:80> ServerName example1.com DocumentRoot /var/www/site1/html <Directory /var/www/site1/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> - 重启:
sudo systemctl restart apache2
需要我为你提供:
- 一键部署脚本(含 SSL 自动申请)?
- Docker 方式多站点隔离方案?
- 具体某一步的详细排查指南(如 403/502 错误)?
欢迎告诉我你的系统类型(Ubuntu/CentOS)和是否需 HTTPS,我可定制下一步操作 👇
云小栈