在阿里云 ECS(云服务器)上部署多站点,核心逻辑与本地服务器无异,主要涉及网络层、系统层、Web 服务层以及安全策略四个维度的配置。
以下是基于 Linux 环境(以 CentOS/Ubuntu 为例,使用 Nginx 或 Apache)的标准操作路径和关键设置点:
1. 基础环境与资源规划
- 实例规格:确保 CPU 和内存足以支撑多个站点的并发请求。如果站点较多,建议根据实际负载选择适当规格的实例,或考虑后续扩容。
- 操作系统选择:推荐使用主流发行版如 Ubuntu 20.04/22.04 LTS 或 CentOS Stream 8/9,社区支持完善,软件包兼容性好。
- 磁盘分区:建议将网站数据盘单独挂载,便于备份和维护。例如
/data/www作为所有站点的根目录。
2. 域名解析设置(DNS)
这是多站点访问的前提。你需要在阿里云云解析 DNS 控制台进行配置:
- A 记录:为每个子域名或主域名添加 A 记录,指向你的 ECS 公网 IP。
- 例如:
www.site1.com->ECS_IP - 例如:
site2.com->ECS_IP - 例如:
api.site1.com->ECS_IP
- 例如:
- TTL 值:通常设置为 600 秒或默认值即可,修改后生效时间取决于 TTL。
- 验证:使用
ping命令检查域名是否正确解析到服务器 IP。
3. Web 服务器配置(以 Nginx 为例)
Nginx 因其高性能和低资源占用,是部署多站点的推荐选择。关键在于虚拟主机(Server Block)的配置。
步骤一:安装 Nginx
# Ubuntu/Debian
sudo apt update && sudo apt install nginx -y
# CentOS/RHEL
sudo yum install epel-release -y && sudo yum install nginx -y
步骤二:创建站点目录结构
为每个站点创建独立的目录和日志目录,避免权限混乱:
sudo mkdir -p /var/www/site1.com/html
sudo mkdir -p /var/www/site2.com/html
sudo chown -R $USER:$USER /var/www/site1.com/html
sudo chown -R $USER:$USER /var/www/site2.com/html
步骤三:编写 Server Block 配置文件
在 /etc/nginx/sites-available/ 下为每个站点创建独立配置文件:
文件:/etc/nginx/sites-available/site1.com
server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
# 可选:重定向 HTTP 到 HTTPS(需先配置 SSL)
# return 301 https://$server_name$request_uri;
}
文件:/etc/nginx/sites-available/site2.com
server {
listen 80;
server_name site2.com www.site2.com;
root /var/www/site2.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
步骤四:启用站点并测试
# 创建软链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/
# 删除默认配置(防止冲突)
sudo rm /etc/nginx/sites-enabled/default
# 测试配置语法
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
4. 防火墙与安全组设置(阿里云特有重点)
很多用户在此处出错,导致网络无法访问。必须同时配置两点:
A. 阿里云安全组(Security Group)
登录阿里云控制台 -> ECS 实例 -> 安全组 -> 配置规则:
- 入方向规则:
- 允许 TCP 协议,端口 80(HTTP)和 443(HTTPS)来自
0.0.0.0/0。 - 如果仅通过 SSH 管理,确保 22 端口对特定 IP 开放,而非全开放。
- 允许 TCP 协议,端口 80(HTTP)和 443(HTTPS)来自
- 注意:安全组优先级高于系统内部防火墙。即使 iptables/firewalld 放行了,安全组不放行也无法访问。
B. 系统内部防火墙(firewalld/ufw)
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
# Ubuntu (ufw)
sudo ufw allow 'Nginx Full'
sudo ufw enable
5. SSL 证书配置(HTTPS)
现代网站必须支持 HTTPS。推荐使用 Let’s Encrypt 免费证书,通过 Certbot 自动化管理。
# 安装 certbot
sudo apt install certbot python3-certbot-nginx # Ubuntu
sudo yum install certbot python3-certbot-nginx # CentOS
# 为每个站点生成证书(Nginx 插件会自动修改配置)
sudo certbot --nginx -d site1.com -d www.site1.com
sudo certbot --nginx -d site2.com -d www.site2.com
Certbot 会自动:
- 下载并安装证书。
- 修改 Nginx 配置,监听 443 端口。
- 设置自动续期(通过 cron job)。
6. 后端服务隔离(如适用)
如果站点包含 PHP、Python、Node.js 等动态内容:
- PHP-FPM:可为不同站点配置不同的 PHP-FPM 池(pool),指定不同的 user/group,实现进程隔离。
- 反向X_X:对于 Node.js 或 Go 应用,可在 Nginx 中使用
proxy_pass指向本地不同端口(如 localhost:3000, localhost:3001)。
7. 监控与维护建议
- 日志分离:每个站点的 access.log 和 error.log 应独立存放,便于排查问题。
- 定期备份:利用阿里云快照功能,定期为系统盘和数据盘创建快照。也可配置定时任务将网站代码和数据库备份到 OSS(对象存储)。
- 性能调优:
- 调整 Nginx 的
worker_processes和worker_connections。 - 开启 gzip 压缩减少带宽消耗。
- 设置静态资源缓存过期时间。
- 调整 Nginx 的
常见陷阱提醒
- 权限问题:确保 Web 服务器用户(如
www-data或nginx)有读取网站目录的权限,但不要赋予写权限(除非必要)。 - SELinux:CentOS 默认开启 SELinux,可能阻止 Nginx 访问自定义目录。如需使用非标准路径,需设置上下文:
semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"然后restorecon -Rv /var/www。 - 端口冲突:确保没有其他服务占用 80/443 端口。
- CDN 提速:如果面向全国用户,建议在阿里云 CDN 控制台接入,并将源站设置为 ECS IP,可显著提升访问速度并减轻服务器压力。
通过以上步骤,你可以在单台阿里云 ECS 上稳定、安全地部署多个网站点。随着业务增长,再考虑拆分至多台服务器或使用容器化方案(如 Kubernetes)。
CLOUD云枢