nginx配置多个vue项目

文章介绍了两种在nginx中配置多个vue项目的方法。一种是通过设置多个server块,每个项目绑定不同端口;另一种是在同一server块内配置,通过调整vue项目的publicPath和router基路径,使多个项目共享同一端口。在后者中,vue项目的打包配置也需要相应调整。

Nginx 部署多个Vue项目:两种配置方案详解

在实际开发与部署中,我们经常会遇到一台服务器部署多个Vue项目的需求。本文将详细讲解Nginx部署多个Vue项目的两种主流方案:多端口独立部署单端口路径区分部署,附完整配置与避坑要点,新手也能直接上手。

一、方案一:多端口部署(独立Server,简单易维护)

方案特点

每个Vue项目占用独立端口,互相隔离、互不影响,配置逻辑清晰,后期维护方便,适合项目数量少、端口资源充足的场景。

配置步骤

直接在Nginx配置文件中,为每个Vue项目新增独立的server块,仅修改监听端口、项目资源路径即可。

完整配置示例

# 第一个Vue项目:监听9001端口,访问地址 http://服务器IP:9001
server {
    listen       9001;  # 独立端口1
    server_name  localhost;

    # 项目1资源映射
    location / {
        root   /home/project/dist;  # 项目1打包后的dist目录
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;  # 解决history模式刷新404问题
    }

    # 可按需配置日志、超时等参数
    access_log  logs/vue-project1.log;
}

# 第二个Vue项目:监听9002端口,访问地址 http://服务器IP:9002
server {
    listen       9002;  # 独立端口2(与项目1不同)
    server_name  localhost;

    # 项目2资源映射
    location / {
        root   /home/sub_project/dist;  # 项目2打包后的dist目录
        index  index.html;
        try_files $uri $uri/ /index.html;
    }

    access_log  logs/vue-project2.log;
}

核心说明

  1. 每个server块对应一个Vue项目,复制模板后改端口root路径即可;
  2. try_files是关键配置,Vue的history路由模式必须加,否则刷新页面会报404;
  3. 端口需确保未被占用,可通过netstat -tuln | grep 端口号检查。

二、方案二:单端口部署(同Server,路径区分,节省端口)

方案特点

多个Vue项目共用同一个端口,通过访问路径区分项目(如/为项目A、/sub为项目B),节省服务器端口资源,适合项目数量多、端口紧张的场景。

前置准备:修改Vue项目打包配置

单端口部署需先调整子项目(非根路径项目)的Vue配置,否则资源路径会报错,无法正常加载。

1. 配置vue.config.js:设置publicPath

指定项目打包后的资源基础路径,与Nginx访问路径保持一致。

module.exports = {
  publicPath: '/sub',  // 子项目访问前缀(如 /sub),根项目写 '/'
  outputDir: 'dist',   // 打包输出目录,默认即可
  assetsDir: 'static'  // 静态资源存放目录,默认即可
}
2. 配置路由:设置base路径

路由基础路径需与publicPath完全一致,避免路由跳转异常。

import Router from 'vue-router'
import routers from './routes'

const createRouter = () => new Router({
  base: '/sub',  // 与publicPath一致
  mode: 'history',  // 必须用history模式
  scrollBehavior: () => ({ y: 0 }),
  routes: routers
})

export default createRouter
3. 打包验证

执行npm run build打包后,查看dist/index.html,JS/CSS资源路径会自动加上/sub前缀,如下所示:

<script type="text/javascript" src="/sub/static/js/chunk-vendors.js"></script>
<script type="text/javascript" src="/sub/static/js/app.js"></script>

Nginx配置:单Server映射多路径

所有项目共用一个server块,通过location匹配不同路径,分别指向对应项目的dist目录。

完整配置示例

# 共用9001端口,根路径/为项目1,/sub为项目2
server {
    listen       9001;
    server_name  localhost;

    # 主项目:访问地址 http://服务器IP:9001
    location / {
        root   /home/project/dist;  # 主项目dist目录
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    # 子项目:访问地址 http://服务器IP:9001/sub
    location /sub {
        alias   /home/sub_project/dist;  # 子项目dist目录(注意用alias,不用root)
        index   index.html;
        try_files $uri $uri/ /sub/index.html;  # 路径匹配要加/sub
    }

    access_log  logs/vue-multi-project.log;
}

避坑重点

  1. 子项目location必须用alias,主项目用root;若混用root,会出现资源404;
  2. 子项目try_files末尾要加/sub/index.html,与访问路径一致;
  3. 所有Vue项目必须开启history模式,且路由basepublicPath、Nginx路径三者必须统一。

三、两种方案对比总结

对比维度多端口部署单端口部署
端口占用多端口,占用资源多单端口,节省资源
配置难度简单,直接复制修改稍复杂,需改Vue打包配置
维护成本低,项目隔离,易排查问题较高,路径关联,排查需联动
适用场景项目少、端口充足、追求简单项目多、端口紧张、需统一域名

四、最后一步:重启Nginx生效

修改配置后,执行以下命令重启Nginx,配置即可生效:

# 检查配置是否正确(必执行,避免配置错误导致Nginx启动失败)
nginx -t

# 重启Nginx
systemctl restart nginx
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Litluecat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值