努力
加油

如何在阿里云ECS上配置多个网站服务?

在阿里云 ECS 上部署多个网站,核心思路其实就一句话:一个公网 IP,通过 Nginx(或 Apache)做反向XX,根据域名把流量分发到不同的后端服务。

别被“云服务器”、“负载均衡”这些词吓到。对于大多数中小规模站点,你不需要买 SLB(Server Load Balancer),直接用一台 ECS 配合 Nginx 就能搞定,成本低且运维简单。

下面我以目前最主流、最稳定的 Nginx + PHP-FPM 架构为例,手把手讲怎么配置。假设你的 ECS 是 CentOS 7/8 或 Ubuntu 系统。

第一步:基础环境准备

  1. 购买 ECS 并绑定弹性公网 IP (EIP)

    • 确保你的 ECS 已经分配了公网 IP。
    • 安全组配置:这是新手最容易踩坑的地方。去阿里云控制台 -> 实例 -> 安全组 -> 配置规则。必须放行 80 (HTTP) 和 443 (HTTPS) 端口,方向选“入方向”,授权对象写 0.0.0.0/0。否则网络根本访问不了你的网站。
  2. 安装必要软件

    • 推荐直接装宝塔面板(BT Panel)或者 LNMP 一键包,适合个人开发者和小团队,图形化界面省心。
    • 如果你是追求极致控制的专业人士,建议手动编译安装 Nginx 和 PHP。这里我按手动配置 Nginx 的逻辑来讲,因为原理通用,不管你是用宝塔还是手动改配置文件,底层逻辑一样。
    # CentOS 示例
    yum install nginx php-fpm mysql-server -y
    systemctl start nginx
    systemctl enable nginx

第二步:解析域名

你有两个网站,比如 site-a.com 和 site-b.com。

  1. 登录阿里云 云解析 DNS。
  2. 添加两条 A 记录:
    • 主机记录:@ (代表主域名) 或 www
    • 记录值:你的 ECS 公网 IP
    • TTL:默认即可
  3. 等待几分钟生效(可以用 ping site-a.com 测试是否指向你的 IP)。

第三步:创建网站目录结构

不要把所有文件都扔在 /var/www/html 里,这样管理起来会乱。建议按项目隔离:

/var/www/
├── site-a/
│   ├── index.html
│   └── ...
└── site-b/
    ├── index.php
    └── ...

确保 Nginx 运行用户(通常是 nginx 或 www-data)有权限读取这些目录。

第四步:配置 Nginx Server Block(关键步骤)

Nginx 的核心能力就是虚拟主机。你需要为每个网站创建一个独立的配置文件。

1. 为 site-a.com 配置

找到 Nginx 的配置文件目录,通常在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/。新建一个文件 site-a.conf:

server {
    listen 80;
    server_name site-a.com www.site-a.com;

    # 日志路径,方便排查问题
    access_log /var/log/nginx/site-a.access.log;
    error_log /var/log/nginx/site-a.error.log;

    root /var/www/site-a;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # 如果后续要加 HTTPS,可以在这里配置 SSL
}

2. 为 site-b.com 配置

同样新建 site-b.conf:

server {
    listen 80;
    server_name site-b.com www.site-b.com;

    access_log /var/log/nginx/site-b.access.log;
    error_log /var/log/nginx/site-b.error.log;

    root /var/www/site-b;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 处理 PHP 请求
    location ~ .php$ {
        fastcgi_pass unix:/run/php/php-fpm.sock; # 注意路径,不同系统可能不同
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

3. 加载配置

修改完成后,检查语法是否正确:

nginx -t

如果显示 syntax is ok,则重载 Nginx 使配置生效:

systemctl reload nginx

第五步:验证与优化

  1. 浏览器访问测试

    • 打开浏览器,输入 http://site-a.com 和 http://site-b.com。
    • 你应该能看到各自对应的网页内容。
    • 如果打不开,先检查防火墙(firewalld 或 iptables)是否放行了 80 端口,再检查 Nginx 错误日志。
  2. 开启 HTTPS(强烈推荐)

    • 现在没有 HTTPS 的网站会被浏览器标记为“不安全”。
    • 在阿里云控制台搜索 SSL 证书服务,可以申请免费的单域名证书(DV 证书)。
    • 下载证书后,上传到服务器,然后在 Nginx 配置中启用 SSL:
    server {
        listen 443 ssl;
        server_name site-a.com;
    
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/cert.key;
    
        # 其他配置同上...
    }
    
    # 强制跳转 HTTPS
    server {
        listen 80;
        server_name site-a.com;
        return 301 https://$host$request_uri;
    }

进阶场景:如果网站越来越多怎么办?

当你的站点超过 5-10 个,或者并发量变大时,单机 Nginx 可能会成为瓶颈。这时候可以考虑以下方案:

  1. 使用 Docker 容器化部署

    • 每个网站跑在一个独立的 Docker 容器里,通过 Docker Compose 管理。
    • Nginx 作为入口,通过 Docker 内部网络转发请求。
    • 优点:环境隔离,迁移方便,不会互相污染。
  2. 升级架构:SLB + 多台 ECS

    • 如果预算允许,购买阿里云 SLB (应用负载均衡)。
    • 将 SLB 的监听端口指向多台后端 ECS 的 80 端口。
    • 这样即使某台 ECS 挂了,流量会自动切换到另一台,实现高可用。
    • 此时,每台 ECS 上依然可以配置多个虚拟主机,但整体负载由 SLB 分摊。
  3. 使用云原生托管(ACK / FC)

    • 如果是微服务架构,直接上阿里云 ACK(容器服务 Kubernetes 版)或函数计算 FC,彻底告别手动维护服务器操作系统。但这属于 DevOps 范畴,初期学习成本较高。

常见坑点提醒

  • SELinux 阻止访问:如果你用了 SELinux(CentOS 默认开启),Nginx 可能无法读取自定义目录下的文件。临时解决:setsebool -P httpd_read_content 1,或者更干脆地设置 SELinux 为 Permissive 模式(生产环境建议正确配置策略而非关闭)。
  • 权限问题:确保 Web 目录的所有者是 nginx:nginx(或对应用户),权限设为 755。不要用 chmod 777,那是安全隐患。
  • PHP 版本冲突:如果不同网站需要不同 PHP 版本(如一个 7.4,一个 8.0),建议使用 PHP-FPM 的多版本共存,或者用 Docker 隔离。
  • 阿里云监控:别忘了在 ECS 控制台开启“云监控”,设置 CPU、内存、带宽告警。很多站长直到网站崩了才知道服务器资源耗尽。

总结来说,Nginx 反向XX + 独立域名解析 是最经典、最稳定、成本最低的多网站部署方案。先跑通这个流程,后续再根据业务增长逐步引入容器化或负载均衡。