在阿里云服务器上实现前后端共存,核心思路是将前端静态资源托管给 Nginx(或类似 Web 服务器),后端 API 请求通过反向X_X转发到应用服务。以下是完整、可落地的配置方案:
✅ 推荐架构
用户 → 阿里云 ECS(Nginx)
├─ / → 前端静态文件(HTML/CSS/JS)
└─ /api/* → 反向X_X → 后端服务(如 Node.js/Java/Python)
📌 步骤详解
1️⃣ 准备环境
- 已创建阿里云 ECS(CentOS 7+ / Ubuntu 20.04+)
- 已安装并启动后端服务(假设运行在
http://localhost:3000) - 前端项目已构建完成(
npm run build生成dist/目录)
💡 若后端未部署,可用示例:
- Node.js:
node server.js- Java Spring Boot:
java -jar app.jar- Python Flask/FastAPI:
python app.py
2️⃣ 安装 Nginx
# CentOS
sudo yum install nginx -y
# Ubuntu/Debian
sudo apt update && sudo apt install nginx -y
启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
3️⃣ 配置 Nginx 反向X_X + 静态托管
编辑配置文件(以 Ubuntu 为例):
sudo nano /etc/nginx/sites-available/default
替换为以下内容(根据实际路径调整):
server {
listen 80;
server_name your-domain.com; # 或 IP 地址(测试时可用)
# 前端静态资源(假设 dist 目录在 /var/www/myapp/dist)
location / {
root /var/www/myapp/dist;
index index.html;
try_files $uri $uri/ /index.html; # SPA 路由支持(Vue/React)
}
# 后端 API 反向X_X(转发到本地 3000 端口)
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_cache_bypass $http_upgrade;
# 可选:增加超时时间(防止长请求中断)
proxy_connect_timeout 65s;
proxy_send_timeout 65s;
proxy_read_timeout 65s;
}
# 其他 API 路径(如 /auth, /upload 等)可按需扩展
location /auth/ {
proxy_pass http://127.0.0.1:3000;
# 同上X_X头配置...
}
}
✅ 关键说明:
try_files确保 Vue/React 等单页应用刷新不报错(404 →/index.html)proxy_pass中的/api/会被自动去掉前缀转发到后端(即/api/user→http://localhost:3000/user)- 若需保留
/api/,改为proxy_pass http://127.0.0.1:3000/api/;(注意末尾斜杠)
- 若需保留
4️⃣ 部署前端代码 & 重启服务
# 上传前端构建产物(例如用 scp 或 FTP)
scp -r ./dist/* user@your-server:/var/www/myapp/dist/
# 检查权限(Nginx 通常以 www-data 运行)
sudo chown -R www-data:www-data /var/www/myapp/dist
sudo chmod -R 755 /var/www/myapp
# 测试 Nginx 配置
sudo nginx -t
# 重载配置
sudo systemctl reload nginx
5️⃣ 防火墙与安全组配置(阿里云特有!)
🔹 阿里云控制台操作:
- 登录 ECS 控制台
- 找到实例 → 「安全组」→ 点击对应安全组 ID
- 添加入方向规则:
- 端口:
80(HTTP) - 协议:TCP
- 授权对象:
0.0.0.0/0(生产环境建议限制为特定 IP 段)
- 端口:
🔹 系统防火墙(如启用 firewalld/ufw):
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
# Ubuntu (ufw)
sudo ufw allow 80/tcp
sudo ufw enable
6️⃣ 验证访问
- 浏览器访问:
http://your-ip或http://your-domain.com - 前端页面应正常加载
- 调用接口:
http://your-ip/api/user→ 应被正确X_X到后端
🔐 进阶建议(生产环境必备)
| 项目 | 方案 |
|---|---|
| HTTPS | 使用 Let’s Encrypt 免费证书:sudo certbot --nginx -d your-domain.com |
| 进程守护 | 后端用 systemd 或 PM2 管理(Node.js)例: pm2 start app.js --name myapp |
| 日志监控 | Nginx 日志:/var/log/nginx/access.log后端日志集中到 ELK 或云监控 |
| CDN 提速 | 阿里云 CDN 接入静态资源(提升首屏速度) |
| Docker 部署 | 更推荐容器化:前后端分别 Dockerfile,用 docker-compose 编排 |
❓ 常见问题排查
| 问题 | 解决方案 |
|---|---|
| 前端能打开,API 返回 404 | 检查 proxy_pass 路径是否匹配;确认后端监听的是 0.0.0.0 而非仅 127.0.0.1 |
| SPA 刷新 404 | 缺少 try_files $uri $uri/ /index.html; |
| 跨域错误 | 后端需设置 CORS 响应头(如 Access-Control-Allow-Origin: *) |
| 端口被占用 | sudo netstat -tlnp | grep :3000 查进程;改端口或 kill 掉 |
需要我提供:
- ✅ 完整的
docker-compose.yml多容器部署方案? - ✅ React/Vue 项目的具体
.env与vite.config.ts配置? - ✅ 一键部署脚本(含 SSL 自动申请)?
欢迎告诉我你的技术栈(如:Vue3 + SpringBoot / Next.js + Express),我可定制详细指南!
云小栈