在阿里云服务器上部署多个网站或应用,核心思路是通过 Nginx/Apache 等反向X_X服务器进行端口或域名分流,配合 Docker(可选)实现隔离。以下是主流方案及操作步骤:
✅ 推荐方案一:Nginx + 多域名/多路径虚拟主机(最常用、轻量)
适用于传统 Web 应用(如 PHP、Node.js、Python Flask/Django 等),无需容器化。
步骤:
-
安装 Nginx
# CentOS/RHEL sudo yum install nginx -y # Ubuntu/Debian sudo apt update && sudo apt install nginx -y -
规划目录结构
/var/www/site1 # 对应 www.example.com /var/www/site2 # 对应 app.example.com /var/www/api # 对应 api.example.com (可跑 Node/Go 等) -
配置 Nginx 虚拟主机
创建/etc/nginx/conf.d/site1.conf:server { listen 80; server_name www.example.com; root /var/www/site1; index index.html index.php; location / { try_files $uri $uri/ /index.php?$query_string; } # 如需 PHP 支持(假设用 PHP-FPM) location ~ .php$ { fastcgi_pass unix:/run/php/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }创建
/etc/nginx/conf.d/site2.conf(示例为 Node.js 反向X_X):server { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:3000; # Node 应用监听端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } -
启动并测试配置
sudo nginx -t # 检查语法 sudo systemctl reload nginx -
DNS 解析 & SSL(重要!)
- 在阿里云 DNS 控制台为各域名添加 A 记录指向服务器公网 IP。
- 使用 Let’s Encrypt +
certbot免费申请 HTTPS 证书:sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d www.example.com -d app.example.com
✅ 方案二:Docker Compose(适合微服务/多语言混合部署)
优势:环境隔离、依赖管理方便、一键启停。
示例 docker-compose.yml:
version: '3'
services:
site1:
image: php:8.2-apache
volumes:
- ./site1:/var/www/html
ports:
- "8081:80"
networks:
- web-net
site2-node:
build: ./site2
ports:
- "8082:3000"
networks:
- web-net
nginx-proxy:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./certs:/etc/nginx/certs
depends_on:
- site1
- site2-node
networks:
- web-net
networks:
web-net:
💡 提示:Nginx 作为统一入口,根据
Host头转发到不同容器内部端口。
✅ 方案三:端口直连(简单但不够优雅)
每个应用监听不同端口(如 80, 8080, 8081),通过浏览器访问 http://ip:8080
⚠️ 缺点:需用户记住端口,不专业;且需开放多个端口到安全组(阿里云 ECS 安全组默认只开 80/443)。
🔐 关键注意事项(阿里云特有)
| 项目 | 操作建议 |
|---|---|
| 安全组 | 仅开放必要端口(如 80/443),其他服务端口由内网通信或 SSH 隧道处理 |
| 防火墙 | 若系统自带 firewalld/ufw,确保放行 80/443 |
| 日志管理 | 各站点日志独立输出(如 /var/log/nginx/site1.log),便于排查 |
| 备份 | 定期备份代码 + 数据库(可用阿里云快照或脚本自动化) |
| 监控 | 启用云监控(CloudMonitor)+ 自定义指标(CPU/内存/QPS) |
📌 最佳实践建议
- 生产环境务必使用 HTTPS(免费证书 + 自动续期)
- 静态资源(图片/CSS/JS)考虑接入 OSS + CDN 提速
- 数据库单独部署或使用 RDS(避免与 Web 同机影响性能)
- 敏感配置(DB 密码、API Key)放入环境变量或阿里云 KMS/SLS 密钥管理
需要我提供某个具体场景的完整配置模板吗?例如:
- WordPress + Laravel 共存
- Vue 前端 + Spring Boot 后端分离部署
- Python Django + Redis + MySQL 全套栈
欢迎告诉我你的技术栈 😊
云小栈