一台云服务器上如何同时运行多个Web项目?

在一台云服务器上同时运行多个 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 &

💡 建议用 systemdsupervisor 管理进程,确保开机自启、崩溃重启。

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.comapp2.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


⚠️ 注意事项

  1. 防火墙规则:仅开放 80/443,禁止暴露内部端口(如 3001)
    sudo ufw allow 'Nginx Full'
    sudo ufw deny 3001
  2. 资源监控:多个项目可能争抢 CPU/内存,建议设置 cgroups 限制或使用容器资源配额。
  3. 日志分离:每个项目独立输出日志,便于排查(如 journalctl -u app1.service)。
  4. 安全加固:启用 WAF、定期更新依赖、禁用不必要的模块。

需要我针对你的技术栈(如 Java/Spring Boot、PHP/Laravel、Vue+Express 等)提供定制化配置模板吗?

未经允许不得转载:CLOUD云枢 » 一台云服务器上如何同时运行多个Web项目?