上一篇
阿里云服务器多站点
- CMS教程
- 2025-08-11
- 1
阿里云服务器支持多站点管理,可通过不同端口/域名区分,灵活分配资源,实现高效
基础架构设计原则
要素 | 说明 |
---|---|
共享资源 | CPU/内存/带宽由单台ECS统一承载 |
隔离方式 | 基于域名区分(推荐)>基于端口区分>基于目录路径区分 |
协议支持 | HTTP/HTTPS双协议兼容,建议启用TLS加密 |
扩展性 | 可通过负载均衡SLB横向扩展,单个站点可独立升降配 |
实施步骤详解
前期准备
必备条件清单:
- 已完成阿里云账号实名认证
- 至少1个已备案域名(需完成ICP备案)
- ECS实例(推荐选择通用型g系列,配置≥2核4G)
- 操作系统建议CentOS 7.9+/Ubuntu 20.04+
- 已安装宝塔面板(可选)或直接使用原生环境
域名解析配置
关键操作示例(假设主域名example.com):
| 子域名 | 记录类型 | 记录值 | 作用说明 |
|————-|———-|——————|—————————|
| www.a.com | A记录 | ECS公网IP | 站点A入口 |
| www.b.com | A记录 | ECS公网IP | 站点B入口 |
| .c.com | CNAME | yourdomain.cn | 通配符泛解析(特殊场景) |
️ 注意:所有域名需指向同一台ECS的公网IP
Web服务器配置(以Nginx为例)
核心配置文件路径:/usr/local/nginx/conf/vhost/.conf
标准虚拟主机模板:
server { listen 80; server_name www.a.com; # 对应第一个站点 root /www/website_a; # 站点根目录 index index.html; location / { try_files $uri $uri/ =404; } } server { listen 80; server_name www.b.com; # 第二个站点 root /www/website_b; index index.php; # PHP项目示例 location ~ .php$ { fastcgi_pass unix:/dev/shm/php-fpm.sock; } }
站点目录权限管理
典型目录结构:
/www/
├── website_a/ # 站点A代码
│ ├── public/ # 公开文件
│ └── .env # 环境变量
└── website_b/ # 站点B代码
├── assets/ # 静态资源
└── config/ # 配置文件
权限设置命令:
chown -R www:www /www/website_a chmod -R 755 /www/website_a
HTTPS证书部署
推荐方案对比:
| 方案 | 优点 | 缺点 | 适用场景 |
|—————|———————–|—————————|————————|
| Let’s Encrypt | 免费自动续期 | 90天有效期 | 开发/测试环境 |
| DigiCert | 1年有效期+商业背书 | 需付费 | 生产环境 |
| Alibaba Cloud| 集成OSS对象存储加速 | 依赖阿里云生态 | 全栈上云企业 |
Nginx配置片段:
server { listen 443 ssl http2; server_name www.a.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; # ...其他配置... }
运维管理要点
性能监控指标
指标 | 健康阈值 | 异常处理建议 |
---|---|---|
CPU使用率 | <70% | 优化代码/升级配置 |
内存占用 | <80% | 增加交换分区/调整进程数 |
磁盘IOPS | <500次/秒 | 迁移高频读写数据至ESSD云盘 |
QPS | 根据业务需求 | 启用CDN加速/数据库读写分离 |
日志分析策略
关键日志文件:
/var/log/nginx/access.log
→ 访问量统计/var/log/nginx/error.log
→ 错误排查/var/log/php-fpm/error.log
→ PHP错误追踪
常用分析命令:
# 查看最近1小时TOP10请求URI tail -n 1000 access.log | grep -Eo 'GET|POST [^?]+' | sort | uniq -c | sort -nr | head -n10 # 统计各站点流量占比 awk '{print $7}' access.log | grep -E 'www.a.com|www.b.com' | sort | uniq -c | sort -nr
常见问题与解答
Q1: 不同站点出现互相跳转怎么办?
原因分析:Nginx配置中的root
指令顺序错误导致优先级混乱。
解决方案:
- 确保每个
server
块都有明确的server_name
声明 - 将默认站点放在最后(无
server_name
的server
块) - 检查是否存在重复的
location
匹配规则 - 执行
nginx -t
验证配置文件语法正确性
Q2: HTTPS证书总是提示过期如何解决?
排查步骤:
- 确认系统时间同步(
ntpd
服务正常运行) - 检查证书文件权限(应为644)
- 验证证书链完整性:
openssl x509 -in fullchain.pem -noout -text
- 若使用Let’s Encrypt,执行更新命令:
certbot renew --force-renewal
- 清除浏览器缓存后重试访问
Q3: 如何限制单个站点的资源使用?
推荐方案:
- CPU限制:通过
cpulimit
命令或systemd
服务单元文件设置[Service] CPUQuota=50% # 限制最大使用率为50%
- 内存限制:使用
ulimit
命令或容器化部署(Docker) - 带宽控制:通过TC(Traffic Control)工具实现QoS限速
- 进程数限制:在Nginx配置中添加
worker_processes auto;
并配合PM2进程管理器
Q4: 如何快速切换测试环境和生产环境?
最佳实践:
- 环境隔离:使用不同的文档根目录(如
/www/test/
和/www/prod/
) - 配置版本控制:将Nginx配置文件纳入Git仓库管理
- 快速切换脚本:编写shell脚本实现以下功能:
- 备份当前生产环境配置
- 替换为测试环境配置
- 重启Nginx服务
- 执行数据库迁移(如有需要)
- DNS切换方案:通过修改本地hosts文件或使用Cloudflare的Develop