在一台云服务器上同时运行多个 Web 项目,核心思路是通过不同的端口、域名或路径来区分服务。以下是几种主流且实用的方案,按推荐程度排序:
✅ 推荐方案一:使用反向X_X服务器(Nginx / Apache)
这是最常用、最灵活的方式。所有 Web 项目监听不同本地端口,由 Ngin/Apache 作为反向X_X,根据域名或 URL 路径转发请求。
示例结构:
用户请求 → Nginx(80/443端口) → 根据域名/路径 → 转发到各项目的本地端口
步骤简述:
- 每个项目独立部署,监听不同本地端口(如
localhost:3000,localhost:8080,localhost:5000) - 安装 Nginx
sudo apt install nginx # Ubuntu/Debian sudo yum install nginx # CentOS/RHEL - 配置 Nginx 虚拟主机
方式 A:基于域名(推荐)
# /etc/nginx/sites-available/myapp1.conf
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# /etc/nginx/sites-available/myapp2.conf
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/myapp1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/myapp2.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
方式 B:基于路径
server {
listen 80;
server_name example.com;
location /app1/ {
proxy_pass http://localhost:3000/;
}
location /app2/ {
proxy_pass http://localhost:8080/;
}
}
⚠️ 注意:基于路径时,后端应用需能正确处理前缀
/app1/或/app2/,否则可能出现静态资源加载失败等问题。
✅ 方案二:使用 Docker + Docker Compose
适合希望隔离环境、简化部署的场景。
示例 docker-compose.yml:
version: '3.8'
services:
app1:
image: node:18
ports:
- "3000:3000"
volumes:
- ./app1:/usr/src/app
working_dir: /usr/src/app
command: npm start
app2:
image: python:3.9
ports:
- "8080:8080"
volumes:
- ./app2:/app
working_dir: /app
command: python app.py
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app1
- app2
然后配置 nginx.conf 实现反向X_X(同方案一)。
优点:
- 环境隔离
- 易于扩展和迁移
- 可配合 Traefik 等自动路由工具
✅ 方案三:使用 PM2(Node.js 项目专用)
如果你全是 Node.js 项目,可以用 PM2 管理多个进程。
npm install -g pm2
pm2 start app1.js --name myapp1
pm2 start app2.js --name myapp2
pm2 save
pm2 startup
再结合 Nginx 反向X_X到不同端口即可。
PM2 本身不支持基于域名的路由,仍需 Nginx 做前端分发。
✅ 方案四:使用 Caddy(自动 HTTPS + 简单配置)
Caddy 是新一代 Web 服务器,支持自动 HTTPS 和简洁配置。
app1.example.com {
reverse_proxy localhost:3000
}
app2.example.com {
reverse_proxy localhost:8080
}
一行命令启动:
caddy run --config Caddyfile
适合快速搭建、不想手动处理 SSL 证书的场景。
📌 最佳实践建议
| 考虑因素 | 推荐方案 |
|---|---|
| 通用性、灵活性 | Nginx 反向X_X |
| 容器化、隔离 | Docker + Nginx/Traefik |
| Node.js 多项目 | PM2 + Nginx |
| 快速上手、自动SSL | Caddy |
| 微服务架构 | Kubernetes / Docker Swarm |
🔐 安全注意事项
- 不要直接暴露后端端口(如 3000、8080),只开放 80/443 给 Nginx/Caddy。
- 使用防火墙限制访问:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw deny 3000/tcp - 为每个项目设置独立的日志,便于排查问题。
- 定期更新系统和软件包。
✅ 总结
最通用做法:每个项目监听不同本地端口 + Nginx 反向X_X根据域名/路径分发请求
这种方式成熟、稳定、社区支持好,适用于绝大多数场景。如需更高自动化或容器化,可引入 Docker + Traefik/Caddy 等现代工具链。
云服务器