加油
努力

如何在阿里云服务器上配置多个网站虚拟主机?

在阿里云服务器上配置多个网站虚拟主机,通常基于 NginxApache 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_nameroot 路径等。


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.comexample2.com 的 A 记录指向你的服务器公网 IP(在阿里云 DNS 控制台操作)。
  • 等待 TTL 生效后,访问 http://example1.comhttp://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,我可定制下一步操作 👇

云服务器