努力
加油

使用阿里云服务器部署多站点需要做哪些设置?

在阿里云 ECS 上部署多站点,核心逻辑其实和你在本地搭建 LAMP/LNMP 环境是一样的:一个 Web 服务器软件(如 Nginx/Apache)通过配置虚拟主机(Virtual Host)来区分不同的域名请求。

阿里云这边主要涉及两个层面的工作:一是网络与资源层(IP、安全组),二是应用配置层(Web 服务器配置)。下面我把步骤拆解清楚,按实际操作流程走。

第一步:基础资源准备

  1. 弹性公网 IP (EIP)

    • 确保你的 ECS 实例绑定了 EIP。如果没绑定,去控制台申请并关联。
    • 注意:默认情况下,一台 ECS 只能绑定一个公网 IP。如果你需要多个独立 IP 对应不同站点,你需要额外购买 EIP 并通过“辅助弹性网卡”或“ENI”的方式绑定到同一台 ECS 上(这属于进阶操作,大多数情况共用一个 IP 即可,靠域名区分)。
  2. 域名解析 (DNS)

    • 登录阿里云云解析 DNS 控制台。
    • 为每个站点添加 A 记录,指向你的 ECS 公网 IP。
    • 例如:www.site1.com -> 1.2.3.4,blog.site2.com -> 1.2.3.4。
    • 关键点:所有站点的域名必须解析到同一个 IP,后续靠 Web 服务器的 ServerName 来分流。
  3. 安全组设置

    • 检查 ECS 的安全组规则,确保 80 (HTTP) 和 443 (HTTPS) 端口对 0.0.0.0/0 开放。这是最常见的新手坑,导致网站打不开。

第二步:安装 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。

  1. 获取证书:

    • 可以在阿里云 SSL 证书服务中购买免费或付费证书。
    • 或者使用 Let’s Encrypt + Certbot 免费获取(推荐,自动化程度高)。
  2. 使用 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.com

    Certbot 会自动修改 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;
    }

第六步:常见问题与优化建议

  1. PHP-FPM 支持:

    • 如果你的站点是 PHP 项目(如 WordPress),需要在 Nginx 配置中添加 fastcgi_pass unix:/run/php/php-fpm.sock; 等 FastCGI 相关配置。
    • 确保安装了 PHP 和 php-fpm,并且版本匹配。
  2. 性能调优:

    • 在 /etc/nginx/nginx.conf 中调整 worker_processes 为 auto。
    • 根据 ECS 配置调整 client_max_body_size(上传文件大小限制)。
  3. 备份与监控:

    • 利用阿里云的“快照”功能定期备份系统盘和数据盘。
    • 开启云监控插件,关注 CPU、内存和网络带宽使用情况。
  4. 防火墙:

    • 除了阿里云控制台的安全组,ECS 内部也可能有 firewalld 或 ufw。确保内部防火墙也放行了 80/443 端口。
  5. 数据库分离(可选进阶):

    • 初期所有站点共用同一台机器的 MySQL 没问题。
    • 当站点增多或流量变大时,考虑将 MySQL 迁移到阿里云 RDS,实现计算与存储分离,提升稳定性和扩展性。

总结

流程就是:买 ECS -> 配 DNS -> 装 Nginx -> 写配置文件(区分域名)-> 配 SSL -> 重载生效。

整个过程不需要特殊的阿里云 API 操作,本质上是标准的 Linux 运维技能。只要 DNS 解析正确、安全组端口放行、Nginx 配置无误,多站点部署就能顺利完成。