在阿里云 ECS(云服务器)上部署两个不同的网站,核心逻辑其实跟本地搭建环境是一样的:一个 Web 服务器软件 + Nginx/Apache 配置文件 + 域名解析。
阿里云本身不直接“托管”你的网站代码,它只是提供了一台裸金属或虚拟机。你需要在这台机器上安装 Web 服务软件,然后通过配置让不同的域名指向不同的项目目录。
以下是基于目前最主流、性能最好的 Nginx 方案的操作步骤。假设你使用的是 CentOS 7/8 或 Ubuntu 系统。
第一步:基础环境准备
-
购买并连接服务器
- 在阿里云控制台购买 ECS 实例,选择 Linux 操作系统(推荐 CentOS 7.9+ 或 Ubuntu 20.04+)。
- 使用 SSH 工具(如 Xshell、FinalShell 或 Mac/Linux 终端)登录服务器。
-
安装 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
- CentOS:
-
安装 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)
-
域名解析
- 登录你的域名注册商(万网/阿里云云解析、腾讯云 DNSPod 等)。
- 添加两条 A 记录:
@或www-> 指向你的阿里云 ECS 公网 IP。- 对两个域名分别做此操作。
-
备案问题(重要!)
- 如果你的 ECS 位于中国大陆节点(绝大多数情况),所有绑定的域名必须完成 ICP 备案。
- 阿里云提供便捷的备案服务,建议在提交备案申请时,将两个域名一起提交。未备案域名在大陆境内会被拦截。
- 如果是海外节点,则无需备案。
-
配置 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; }
常见问题排查
-
访问域名显示 Nginx 默认页?
- 检查
server_name是否写错。 - 检查 Nginx 配置语法
nginx -t是否有报错。 - 确认是否加载了新的
.conf文件(确保在conf.d目录下,且主配置文件nginx.conf中有include /etc/nginx/conf.d/*.conf;)。
- 检查
-
403 Forbidden?
- 通常是权限问题。确保
/var/www/site-a目录及内部文件对 Nginx 运行用户(nginx或www-data)有读取权限。 - 尝试
chmod -R 755 /var/www/site-a。
- 通常是权限问题。确保
-
PHP 页面无法解析,显示源码?
- 检查
php-fpm服务是否在运行。 - 检查 Nginx 配置中的
fastcgi_pass路径是否与php-fpm监听的 socket 路径一致。可以通过netstat -tlnp | grep php查看。
- 检查
-
防火墙/安全组限制?
- 阿里云 ECS 默认只开放部分端口。
- 进入阿里云控制台 -> 网络与安全 -> 安全组 -> 配置规则。
- 确保入方向放行了 80 (HTTP) 和 443 (HTTPS) 端口。
总结
在一台阿里云 ECS 上部署多个网站,本质上是利用 Nginx 的 Server Block(虚拟主机) 功能,根据请求的 Host 头将流量分发到不同的本地目录。只要做好域名解析、ICP 备案(大陆节点)、权限管理和 HTTPS 配置,就可以稳定运行多个独立网站。
云技术博客