在一台云服务器上同时运行多个 Web 项目,核心思路是通过端口隔离、域名区分或路径前缀来避免冲突,并配合反向X_X服务器(如 Nginx)进行统一流量分发。以下是几种主流方案及具体实施步骤:
✅ 推荐方案:使用 Nginx 作为反向X_X(最灵活、生产环境首选)
原理
- 每个项目监听不同的本地端口(如
8001,8002) - Nginx 监听标准 HTTP/HTTPS 端口(80/443)
- 根据请求的 Host 域名 或 URL 路径 转发到对应后端服务
步骤示例
1. 启动各 Web 项目(不同端口)
# 项目 A:Node.js
npm start --port=3001 &
# 项目 B:Python Flask
python app.py --port=5000 &
# 项目 C:Go 应用
./server -port=8080 &
💡 建议用
systemd或supervisor管理进程,确保开机自启、崩溃重启。
2. 安装并配置 Nginx
sudo apt update && sudo apt install nginx -y # Debian/Ubuntu
# 或 yum install nginx # CentOS/RHEL
创建虚拟主机配置 /etc/nginx/sites-available/multi-apps.conf:
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# 可选:基于路径的路由(同一域名下多项目)
server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://127.0.0.1:8080;
}
location /static/ {
alias /var/www/static-files/;
}
location / {
root /var/www/html;
try_files $uri $uri/ =404;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/multi-apps.conf /etc/nginx/sites-enabled/
sudo nginx -t # 检查语法
sudo systemctl restart nginx
3. DNS 与 SSL(生产必备)
- 将
app1.example.com、app2.example.com解析到服务器 IP - 使用 Let’s Encrypt 自动申请证书:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d app1.example.com -d app2.example.com
🔁 其他可行方案(按场景选择)
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
不同端口直接访问http://ip:3001, http://ip:5000 |
开发测试、内网工具 | 简单快速 | 不安全、需记端口、无 HTTPS 默认支持 |
| Docker + Compose | 微服务、依赖复杂项目 | 环境隔离、一键部署、易扩展 | 学习成本略高 |
| PM2 / Supervisor 集群 | Node.js/Python 等语言栈 | 进程管理强大、日志集中 | 仍需 Nginx 做负载均衡/路由 |
| Kubernetes (K8s) | 超大规模、高可用需求 | 自动化扩缩容、滚动更新 | 过重杀鸡用牛刀 |
Docker 示例(快速上手)
# docker-compose.yml
version: '3'
services:
app1:
build: ./app1
ports: ["3001:3000"]
networks: [net]
app2:
build: ./app2
ports: ["5000:5000"]
networks: [net]
nginx:
image: nginx:alpine
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
- "443:443"
depends_on: [app1, app2]
networks: [net]
networks:
net:
启动:docker-compose up -d
⚠️ 注意事项
- 防火墙规则:仅开放 80/443,禁止暴露内部端口(如 3001)
sudo ufw allow 'Nginx Full' sudo ufw deny 3001 - 资源监控:多个项目可能争抢 CPU/内存,建议设置
cgroups限制或使用容器资源配额。 - 日志分离:每个项目独立输出日志,便于排查(如
journalctl -u app1.service)。 - 安全加固:启用 WAF、定期更新依赖、禁用不必要的模块。
需要我针对你的技术栈(如 Java/Spring Boot、PHP/Laravel、Vue+Express 等)提供定制化配置模板吗?
CLOUD云枢