在阿里云ECS上同时运行两个Web服务是常见需求,有多种可靠、安全且可扩展的方案。以下是推荐的主流方法,按推荐程度和适用场景排序,并附关键操作步骤和注意事项:
✅ 推荐方案:使用反向X_X(Nginx/Apache) + 不同端口/域名(最常用、最灵活)
🌟 优势:
- 支持同一IP、不同域名(如
site1.com和site2.com)或同一域名不同路径(/app1,/app2) - 自动处理HTTPS(Let’s Encrypt)、负载均衡、缓存、静态资源优化
- 后端服务可独立部署、独立升级、互不干扰
🔧 实施步骤:
-
为两个Web服务分配不同端口(推荐)
- 服务A(如Node.js)监听
127.0.0.1:3000 - 服务B(如Python Flask)监听
127.0.0.1:5000
✅ 注意:不要绑定
0.0.0.0:3000公网暴露,仅内网通信更安全。
- 服务A(如Node.js)监听
-
安装并配置 Nginx(作为反向X_X)
# Ubuntu/Debian sudo apt update && sudo apt install nginx -y sudo systemctl enable nginx && sudo systemctl start nginx -
创建两个站点配置(以域名方式为例)
/etc/nginx/conf.d/site1.conf:server { listen 80; server_name site1.com; # 替换为你的域名(需DNS解析到ECS公网IP) location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }/etc/nginx/conf.d/site2.conf:server { listen 80; server_name site2.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } -
启用HTTPS(强烈建议)
使用 Certbot 自动申请免费SSL证书:sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d site1.com -d www.site1.com sudo certbot --nginx -d site2.com -d www.site2.com→ Certbot 会自动修改 Nginx 配置,添加 HTTPS 重定向。
-
启动服务并测试
sudo nginx -t && sudo systemctl reload nginx # 确保你的两个应用已后台运行(如用 pm2、systemd 或 supervisor 管理)
⚙️ 其他可行方案对比
| 方案 | 适用场景 | 优点 | 缺点 | 注意事项 |
|---|---|---|---|---|
不同端口直连http://IP:8080 & http://IP:8081 |
快速测试、内网访问、无域名场景 | 配置极简 | ❌ 不安全(暴露端口)、不支持HTTPS、URL丑陋、防火墙需额外放行 | 安全组必须开放对应端口;生产环境不推荐 |
| Docker + Nginx 反向X_X | 微服务、环境隔离强、易迁移 | 容器化隔离、依赖不冲突、一键部署 | 学习成本略高 | 需安装 Docker;推荐用 docker-compose.yml 统一管理 |
| Apache 虚拟主机 | 已熟悉 Apache 的用户 | 成熟稳定 | 配置语法稍复杂,内存占用略高 | 类似 Nginx,用 <VirtualHost> 实现多站点 |
同一端口 + 不同路径/app1/, /app2/ |
单域名下托管多个子应用 | URL统一、便于管理 | 后端需适配 base path(如 React Router 配置 basename),静态资源路径易出错 |
需在 proxy_pass 后加路径,如 proxy_pass http://127.0.0.1:3000/app1/; |
🔐 关键安全与运维提醒(阿里云ECS专属)
-
安全组配置(必做!)
- ✅ 仅开放:
80(HTTP)、443(HTTPS)端口给0.0.0.0/0 - ❌ 禁止开放
3000、5000、22(SSH)等给公网(除非必要)→ 若需SSH,限制为你的IP段 - 路径:ECS控制台 → 实例 → 安全组 → 配置规则
- ✅ 仅开放:
-
应用进程守护(防止崩溃退出)
- Node.js:用
pm2npm install -g pm2 pm2 start app1.js --name "site1" pm2 start app2.js --name "site2" pm2 startup && pm2 save # 开机自启 - Python:用
systemd或supervisord
- Node.js:用
-
监控与日志
- Nginx 访问日志:
/var/log/nginx/access.log - 应用日志建议输出到文件 + 配合
logrotate - 阿里云可观测:接入 ARMS 或 SLS 日志服务
- Nginx 访问日志:
✅ 总结:一句话最佳实践
用 Nginx 做反向X_X,两个Web服务分别监听本地不同端口(如 3000/5000),通过不同域名(site1.com / site2.com)对外提供服务,并强制启用 HTTPS + 严格限制安全组入方向端口。
如需我帮你:
- ✍️ 生成完整的
docker-compose.yml示例 - 🐧 写一个 systemd service 文件模板(适用于 Python/Java/Go)
- 🌐 配置二级域名(如
blog.mydomain.com和api.mydomain.com) - 🛑 解决常见报错(如
502 Bad Gateway、Connection refused)
欢迎随时告诉我你的具体技术栈(如:Vue前端 + Spring Boot后端?还是 WordPress + Next.js?),我可以为你定制详细部署脚本 👇
云小栈