阿里云服务器部署多个web项目配置nginx?

在阿里云服务器上使用 Nginx 部署多个 Web 项目,是常见的需求。你可以通过配置 Nginx 的虚拟主机(Virtual Host)来实现一个服务器部署多个网站或 Web 应用。以下是详细步骤和配置示例。


✅ 前提条件

  1. 已有一台阿里云 ECS 实例
  2. 已安装 Nginx(可通过 sudo apt install nginxyum install nginx 安装)
  3. 多个 Web 项目已部署在服务器上(如 Node.js、Python、Java Spring Boot、静态 HTML 等)
  4. 每个项目监听不同的端口或路径
  5. 域名可选(也可用 IP + 端口访问)

📌 部署方式一:基于不同域名(推荐)

每个项目绑定独立的域名,通过 Nginx 反向分发请求。

示例场景:

项目 域名 本地端口
项目A www.site-a.com 3000
项目B www.site-b.com 4000
项目C api.site-a.com 5000

步骤:

  1. 确保域名已解析到服务器公网 IP

    • 在阿里云 DNS 控制台添加 A 记录指向你的 ECS 公网 IP。
  2. 启动并测试 Nginx

sudo systemctl start nginx
sudo systemctl enable nginx
  1. 创建 Nginx 配置文件

进入站点配置目录:

cd /etc/nginx/sites-available/

注意:Ubuntu/Debian 默认有 sites-availablesites-enabled 目录。CentOS/RHEL 默认在 /etc/nginx/conf.d/ 下,直接放 .conf 文件即可。

创建 site-a.com 配置

sudo nano /etc/nginx/sites-available/site-a

内容如下:

server {
    listen 80;
    server_name www.site-a.com;

    location / {
        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_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

创建 site-b.com 配置

sudo nano /etc/nginx/sites-available/site-b
server {
    listen 80;
    server_name www.site-b.com;

    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

创建 API 子域名配置

sudo nano /etc/nginx/sites-available/api-site-a
server {
    listen 80;
    server_name api.site-a.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
  1. 启用站点(Ubuntu/Debian)
sudo ln -s /etc/nginx/sites-available/site-a /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site-b /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/api-site-a /etc/nginx/sites-enabled/

# 删除默认站点(可选)
sudo rm /etc/nginx/sites-enabled/default

CentOS 用户直接将 .conf 文件放入 /etc/nginx/conf.d/ 即可自动加载,无需软链接。

例如:

sudo cp site-a /etc/nginx/conf.d/site-a.conf
  1. 测试配置并重启 Nginx
sudo nginx -t          # 测试语法
sudo systemctl reload nginx
  1. 开放安全组端口

登录阿里云控制台 → 安全组 → 添加规则,放行 80 端口(HTTP)443(HTTPS,后续可用)


📌 部署方式二:基于路径(单域名多项目)

适用于共用一个域名,通过路径区分项目。

示例:

  • example.com/web1 → 项目1(端口 3000)
  • example.com/web2 → 项目2(端口 4000)
  • example.com/api → 后端接口(端口 5000)

配置示例:

server {
    listen 80;
    server_name example.com;

    location /web1/ {
        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;
    }

    location /web2/ {
        proxy_pass http://127.0.0.1:4000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 根路径可指向静态页面或其他
    location / {
        root /var/www/html;
        index index.html;
    }
}

注意:proxy_pass 后面加 / 很重要,会影响路径转发行为。


🔐 可选:配置 HTTPS(SSL 证书)

使用 Let’s Encrypt 免费证书:

sudo certbot --nginx -d www.site-a.com -d api.site-a.com

或手动配置 SSL:

listen 443 ssl;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;

✅ 常见问题排查

问题 解决方案
502 Bad Gateway 检查后端服务是否运行,端口是否正确
静态资源 404 检查 proxy_pass 是否带 /,或静态资源配置是否正确
域名无法访问 检查 DNS 解析、安全组、Nginx 配置
Nginx 启动失败 使用 nginx -t 查看错误日志 /var/log/nginx/error.log

🧩 补充建议

  • 使用 PM2 管理 Node.js 项目:pm2 start app.js --name "web1"
  • 使用 systemd 管理 Java/Spring Boot 应用
  • 定期备份 Nginx 配置
  • 使用 upstream 负载均衡(高级场景)

✅ 总结

通过 Nginx 的 server_namelocation 规则,可以轻松实现一台阿里云服务器部署多个 Web 项目。推荐使用多域名反向方式,清晰易维护。

如果你提供具体项目类型(如 Vue、React、Spring Boot、Django),我可以给出更精确的配置模板。

需要我生成一个完整配置文件模板吗?

未经允许不得转载:ECLOUD博客 » 阿里云服务器部署多个web项目配置nginx?