在阿里云 ECS 实例上同时部署前端和后端应用,通常有几种主流方案。以下是最推荐的生产级方案:使用 Nginx 作为反向X_X,将前端静态资源与后端 API 请求分离处理。
✅ 推荐架构(Nginx + Node.js/Java/Python 等后端)
用户 → ECS (Nginx)
├── /api/* → 转发到后端服务 (如 localhost:3000)
└── /* → 返回前端静态文件 (如 /var/www/html)
📦 前提准备
- 购买阿里云 ECS 实例(推荐 CentOS 7+/Ubuntu 20.04+)
- 安全组配置:开放端口
80(HTTP)、443(HTTPS,可选) - SSH 登录服务器
🛠️ 步骤详解
第一步:安装基础软件
以 Ubuntu 为例(CentOS 命令类似):
# 更新包管理器
sudo apt update
# 安装 Nginx
sudo apt install nginx -y
# 安装 Node.js(如果后端是 Node.js)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs -y
# 其他后端语言同理,如 Python、Java 等
第二步:部署前端应用
假设你的前端项目已构建为静态文件(如 Vue/React 打包后的 dist/ 目录):
# 创建前端存放目录
sudo mkdir -p /var/www/myapp/frontend
# 上传或复制前端构建文件到此目录
# 例如通过 scp 或 git clone
scp -r ./dist/* user@your-ecs-ip:/var/www/myapp/frontend/
# 设置权限
sudo chown -R www-data:www-data /var/www/myapp/frontend
第三步:部署后端应用
假设后端是一个 Node.js Express 应用:
# 创建后端目录
sudo mkdir -p /var/www/myapp/backend
# 上传后端代码
scp -r ./backend/* user@your-ecs-ip:/var/www/myapp/backend/
# 安装依赖并启动后端服务
cd /var/www/myapp/backend
npm install
npm start
💡 建议:使用
pm2管理后端进程,确保崩溃后自动重启:npm install -g pm2 pm2 start app.js --name "my-backend" pm2 save pm2 startup
第四步:配置 Nginx 反向X_X
编辑 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/default
替换内容为:
server {
listen 80;
server_name your-domain.com; # 或使用 IP 地址
# 前端静态资源
location / {
root /var/www/myapp/frontend;
index index.html;
try_files $uri $uri/ /index.html; # SPA 路由支持
}
# 后端 API 接口
location /api/ {
proxy_pass http://127.0.0.1:3000; # 后端服务监听端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
⚠️ 注意:
- 前端
try_files用于支持 React/Vue 等 SPA 的路由跳转/api/前缀需与前端调用后端时使用的路径一致
保存后测试并重载 Nginx:
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx
第五步:验证部署
- 浏览器访问
http://your-ecs-ip - 前端页面正常加载
- 前端调用
/api/xxx能正确转发到后端并返回数据
🔐 可选:配置 HTTPS(Let’s Encrypt)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
按提示完成 SSL 证书配置,Nginx 会自动更新为 HTTPS。
🔄 其他部署方案对比
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Nginx 反向X_X(推荐) | 生产环境通用 | 性能高、灵活、易维护 | 需手动配置 |
| Docker Compose | 多服务复杂项目 | 隔离性好、一键启停 | 学习成本高 |
| PM2/Nginx 同机 | 简单 Node.js 项目 | 配置简单 | 扩展性差 |
| 阿里云轻量应用服务器 | 小型个人项目 | 成本低、集成度高 | 功能受限 |
🐳 Docker 方案示例(进阶)
如果使用 Docker,可简化部署:
# docker-compose.yml
version: '3'
services:
frontend:
image: nginx
ports: ["80:80"]
volumes:
- ./frontend/dist:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- backend
backend:
build: ./backend
ports: ["3000:3000"]
# nginx.conf
location /api/ {
proxy_pass http://backend:3000;
}
启动:
docker compose up -d
✅ 最佳实践建议
- 使用域名 + CDN:提升访问速度和安全性
- 日志监控:配置 Nginx 日志 + PM2 日志收集
- 自动备份:定期备份前端文件和数据库
- 防火墙限制:仅开放 80/443 端口,后端端口不对外暴露
- CI/CD 自动化:结合 GitLab CI / GitHub Actions 实现自动部署
如有具体技术栈(如 Java Spring Boot、Python Flask、Go 等),可提供更针对性的配置方案。
CLOUD技术博