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

在一台云服务器上同时运行多个 Web 项目,核心思路是:每个项目监听不同的端口或域名,并通过反向X_X(如 Nginx)统一对外提供服务。以下是几种主流方案及具体步骤:


✅ 推荐方案:使用 Nginx 作为反向X_X(最灵活、生产环境首选)

1. 安装 Nginx

# Ubuntu/Debian
sudo apt update && sudo apt install nginx

# CentOS/RHEL
sudo yum install epel-release && sudo yum install nginx

2. 为每个项目配置独立的上游服务

假设你有两个项目:

  • 项目 A:Node.js 应用,监听 localhost:3000
  • 项目 B:Python Flask 应用,监听 localhost:5000

分别启动它们(可用 PM2、systemd、Docker 等管理进程,避免直接 node app.js 阻塞终端)。

💡 建议用 systemd 管理后台服务(示例):

# /etc/systemd/system/my-node-app.service
[Unit]
Description=My Node App
After=network.target

[Service]
User=www-data
WorkingDirectory=/var/www/my-node-app
ExecStart=/usr/bin/node app.js
Restart=always
Environment="NODE_ENV=production"

[Install]
WantedBy=multi-user.target

启用并启动:

sudo systemctl enable my-node-app
sudo systemctl start my-node-app

3. 配置 Nginx 虚拟主机(多域名或子路径)

方式一:按域名区分(推荐)

创建 /etc/nginx/sites-available/project-a.conf

server {
    listen 80;
    server_name project-a.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

创建 /etc/nginx/sites-available/project-b.conf

server {
    listen 80;
    server_name project-b.example.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # ...同上头信息
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/project-a.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/project-b.conf /etc/nginx/sites-enabled/
sudo nginx -t      # 测试配置
sudo systemctl reload nginx

✅ 访问效果:

  • http://project-a.example.com → 项目 A
  • http://project-b.example.com → 项目 B

方式二:按路径区分(适合子目录部署)

修改默认站点 /etc/nginx/sites-available/default

server {
    listen 80;
    server_name example.com;

    location /app1/ {
        rewrite ^/app1/(.*)$ /$1 break;
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        # ...
    }

    location /app2/ {
        rewrite ^/app2/(.*)$ /$1 break;
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        # ...
    }
}

访问:

  • example.com/app1/ → 项目 A
  • example.com/app2/ → 项目 B

⚠️ 注意:后端应用需能处理相对路径(如设置 BASE_URL=/app1),否则静态资源可能加载失败。


🔁 其他可行方案对比

方案 优点 缺点 适用场景
Nginx + 多端口 灵活、支持 HTTPS、负载均衡 需配置 SSL 证书(Let’s Encrypt 可自动化) 生产环境首选
Docker Compose 隔离性好、一键部署、易扩展 学习曲线稍高;需 Docker 环境 微服务、CI/CD 集成
Apache + mod_proxy 类似 Nginx,PHP 生态友好 性能略逊于 Nginx 传统 LAMP 栈迁移
直接暴露不同端口(如 :80, :8080, :8081 最简单,无需X_X 不安全(需防火墙限制)、用户体验差(用户需记端口) 开发测试阶段

🔒 安全与运维建议

  1. 防火墙开放必要端口
    sudo ufw allow 'Nginx Full'
    sudo ufw allow OpenSSH
    sudo ufw enable
  2. 启用 HTTPS(免费):
    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d project-a.example.com -d project-b.example.com
  3. 日志分离:在 Nginx 中为每个 site 配置独立 access/error log。
  4. 进程守护:务必用 systemd/PM2/Docker 管理,避免进程退出后服务不可用。

需要我为你生成一个完整的项目模板(含 Dockerfile + docker-compose.yml + Nginx 配置)吗?或者你当前用的是哪种技术栈(Java/Spring、Node.js、PHP 等)?我可以提供针对性配置。

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