努力
加油

如何在阿里云服务器上配置两个不同的网站?

在阿里云 ECS(云服务器)上部署两个不同的网站,核心逻辑其实跟本地搭建环境是一样的:一个 Web 服务器软件 + Nginx/Apache 配置文件 + 域名解析。

阿里云本身不直接“托管”你的网站代码,它只是提供了一台裸金属或虚拟机。你需要在这台机器上安装 Web 服务软件,然后通过配置让不同的域名指向不同的项目目录。

以下是基于目前最主流、性能最好的 Nginx 方案的操作步骤。假设你使用的是 CentOS 7/8 或 Ubuntu 系统。

第一步:基础环境准备

  1. 购买并连接服务器

    • 在阿里云控制台购买 ECS 实例,选择 Linux 操作系统(推荐 CentOS 7.9+ 或 Ubuntu 20.04+)。
    • 使用 SSH 工具(如 Xshell、FinalShell 或 Mac/Linux 终端)登录服务器。
  2. 安装 Nginx

    • CentOS:
      yum install epel-release -y
      yum install nginx -y
      systemctl start nginx
      systemctl enable nginx
    • Ubuntu:
      apt update
      apt install nginx -y
      systemctl start nginx
      systemctl enable nginx
  3. 安装 PHP(如果网站是动态的)

    • 大多数国内网站都是 PHP 开发的(WordPress, ThinkPHP 等)。
    • CentOS (推荐 Remi源):
      yum install php php-fpm php-mysqlnd php-gd php-mbstring -y
      systemctl start php-fpm
      systemctl enable php-fpm
    • Ubuntu:
      apt install php-fpm php-mysql php-gd php-mbstring -y
      systemctl start php-fpm
      systemctl enable php-fpm

注意: 如果你的网站是静态 HTML,可以跳过 PHP 安装环节。如果是 Java/Node.js/Python,请自行启动对应的服务进程即可,Nginx 主要做反向XX。


第二步:上传网站代码

假设你有两个网站:

  • 网站 A:www.site-a.com
  • 网站 B:www.site-b.com

在服务器上创建对应的目录结构:

mkdir -p /var/www/site-a
mkdir -p /var/www/site-b

将你的网站代码上传到这两个目录中(可以使用 scp 命令,或者通过 FTP/SFTP 客户端上传)。确保文件权限正确:

chown -R www-data:www-data /var/www/site-a  # Ubuntu 用户组通常是 www-data
chown -R nginx:nginx /var/www/site-a       # CentOS 用户组通常是 nginx
# 对 site-b 也执行相同操作

第三步:配置 Nginx 虚拟主机(关键步骤)

这是实现“一台服务器跑多个网站”的核心。我们需要为每个网站创建一个独立的配置文件。

1. 配置网站 A (site-a)

编辑 Nginx 配置目录下的新文件:

vi /etc/nginx/conf.d/site-a.conf

写入以下内容(以 CentOS/Nginx 为例,PHP 部分按需调整):

server {
    listen 80;
    server_name www.site-a.com site-a.com; # 替换为你的实际域名

    root /var/www/site-a; # 网站根目录
    index index.html index.php;

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

    # 如果是 PHP 网站,需要处理 .php 文件
    location ~ .php$ {
        fastcgi_pass unix:/run/php/php-fpm.sock; # CentOS 路径可能是 /var/run/php-fpm/php-fpm.sock
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 可选:禁止访问隐藏文件
    location ~ /. {
        deny all;
    }
}

2. 配置网站 B (site-b)

同样新建一个配置文件:

vi /etc/nginx/conf.d/site-b.conf

内容类似,但修改域名和路径:

server {
    listen 80;
    server_name www.site-b.com site-b.com; # 替换为你的实际域名

    root /var/www/site-b; # 网站根目录
    index index.html index.php;

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

    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

每次修改配置后,务必检查语法是否正确,否则 Nginx 无法启动。

nginx -t
# 如果显示 "syntax is ok" 和 "test is successful",则继续
systemctl reload nginx

第四步:域名解析与 SSL 证书(HTTPS)

  1. 域名解析

    • 登录你的域名注册商(万网/阿里云云解析、腾讯云 DNSPod 等)。
    • 添加两条 A 记录:
      • @ 或 www -> 指向你的阿里云 ECS 公网 IP。
      • 对两个域名分别做此操作。
  2. 备案问题(重要!)

    • 如果你的 ECS 位于中国大陆节点(绝大多数情况),所有绑定的域名必须完成 ICP 备案。
    • 阿里云提供便捷的备案服务,建议在提交备案申请时,将两个域名一起提交。未备案域名在大陆境内会被拦截。
    • 如果是海外节点,则无需备案。
  3. 配置 HTTPS(推荐)

    • 现在没有 HTTPS 的网站体验很差,且可能被浏览器标记为“不安全”。
    • 在阿里云控制台搜索 “SSL 证书”,可以申请免费的 DV 单域名证书(Symantec 或 GeoTrust 品牌)。
    • 下载证书后,上传到服务器,修改 Nginx 配置监听 443 端口:
    server {
        listen 443 ssl;
        server_name www.site-a.com;
    
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/cert.key;
    
        # ... 其他配置同上 ...
    }
    
    # 可选:强制跳转 HTTPS
    server {
        listen 80;
        server_name www.site-a.com;
        return 301 https://$server_name$request_uri;
    }

常见问题排查

  1. 访问域名显示 Nginx 默认页?

    • 检查 server_name 是否写错。
    • 检查 Nginx 配置语法 nginx -t 是否有报错。
    • 确认是否加载了新的 .conf 文件(确保在 conf.d 目录下,且主配置文件 nginx.conf 中有 include /etc/nginx/conf.d/*.conf;)。
  2. 403 Forbidden?

    • 通常是权限问题。确保 /var/www/site-a 目录及内部文件对 Nginx 运行用户(nginx 或 www-data)有读取权限。
    • 尝试 chmod -R 755 /var/www/site-a。
  3. PHP 页面无法解析,显示源码?

    • 检查 php-fpm 服务是否在运行。
    • 检查 Nginx 配置中的 fastcgi_pass 路径是否与 php-fpm 监听的 socket 路径一致。可以通过 netstat -tlnp | grep php 查看。
  4. 防火墙/安全组限制?

    • 阿里云 ECS 默认只开放部分端口。
    • 进入阿里云控制台 -> 网络与安全 -> 安全组 -> 配置规则。
    • 确保入方向放行了 80 (HTTP) 和 443 (HTTPS) 端口。

总结

在一台阿里云 ECS 上部署多个网站,本质上是利用 Nginx 的 Server Block(虚拟主机) 功能,根据请求的 Host 头将流量分发到不同的本地目录。只要做好域名解析、ICP 备案(大陆节点)、权限管理和 HTTPS 配置,就可以稳定运行多个独立网站。