宝塔面板单域名部署多个 Vue 项目:从路径冲突到完美共存


宝塔面板单域名部署多个 Vue 项目:从路径冲突到完美共存

在服务器运维中,我们经常遇到这样的需求:只有一个域名,但需要同时部署主站管理后台移动端项目 ,甚至还有一个 Node.js 后端

很多开发者在配置时会遇到"静态资源 404"、"刷新页面 404"或"Nginx 配置文件冲突"的问题。今天,我就以实战经验教大家如何一站式解决这些痛点。

一、 核心逻辑:路径分流

我们的目标是通过不同的 URL 后缀来访问不同的项目:

  • exam.com/ -> 访问 Web 主项目
  • exam.com/web -> 访问 Web 镜像/备份
  • exam.com/auth -> 访问 授权/认证项目
  • exam.com/api` -> 转发到 Node.js 后端服务

二、 前端配置(打包前的关键)

Vue 是单页面应用(SPA),在子目录下运行必须修改"基准路径"。

1. 修改 router/index.js

在创建路由实例时,指定 base 路径:

javascript 复制代码
const router = createRouter({
  history: createWebHistory('/auth/'), // 根据子目录名修改
  routes,
});

2. 修改打包配置

  • Vite : 在 vite.config.ts 中设置 base: '/auth/'
  • Vue CLI : 在 vue.config.js 中设置 publicPath: '/auth/'

三、 Nginx 配置:解决"多胞胎"冲突

在宝塔面板中,手动修改【网站设置】->【配置文件】。

1. 解决 duplicate location "/" 错误

这是最常见的错误。如果你开启了宝塔的"反向代理",宝塔会自动生成一个 location /。如果你在配置文件里又写了一个,Nginx 就会报错。

解决方案:

将 Node.js 后端的代理目录改为 /api(在宝塔反向代理界面修改),并在主配置文件中删除或注释掉多余的根路径配置。

2. 完美的 Nginx 配置文件参考

nginx 复制代码
server {
    listen 80;
    server_name yourdomain.com;

    # --- 1. 根目录:部署主项目 ---
    location / {
        root /www/wwwroot/dist/web; # 指向 web 项目
        index index.html;
        try_files $uri $uri/ /index.html; # 解决 History 模式刷新 404
    }

    # --- 2. 子目录项目:使用 alias 而非 root ---
    location /auth {
        alias /www/wwwroot/dist/auth/; # 末尾必须带斜杠
        index index.html;
        try_files $uri $uri/ /auth/index.html; # 注意这里的路径包含前缀
    }

    # --- 3. 后端 API 转发 ---
    # 建议通过宝塔自带的反向代理配置,但代理目录要设为 /api
    include /www/server/panel/vhost/nginx/proxy/yourdomain/*.conf;
}

四、 避坑指南(Q&A)

Q:为什么页面显示出来了,但 CSS/JS 文件报 404?
A: 这是因为打包时的 base 路径没设置对。检查 dist/index.html 里的资源引用路径,如果显示的是 <script src="/js/app.js">,那在子目录下肯定找不到。它应该是 <script src="/auth/js/app.js">

Q:刷新页面就显示 404 怎么回事?
A: 这是 Vue History 模式的特性。Nginx 找不到这个虚拟路径的文件。必须配置 try_files,让所有请求都 fallback 到 index.html

Q:配置保存失败,提示配置错误?
A: 检查大括号 {} 是否闭合,检查每一行是否以分号 ; 结尾。最重要的是,全局搜索是否出现了两个 location /


五、 总结

单域名多项目部署的核心在于:前端改 base,后端改 alias,API 加前缀。只要理清了 Nginx 的路径匹配逻辑,再复杂的项目结构也能轻松驾驭。


相关推荐
IT 行者7 小时前
Web逆向工程AI工具:JSHook MCP,80+专业工具让Claude变JS逆向大师
开发语言·javascript·ecmascript·逆向
程序员 沐阳9 小时前
JavaScript 内存与引用:深究深浅拷贝、垃圾回收与 WeakMap/WeakSet
开发语言·javascript·ecmascript
weixin_456164839 小时前
vue3 子组件向父组件传参
前端·vue.js
安审若无11 小时前
运维知识框架
运维·服务器
cyclv11 小时前
无网络地图展示轨迹,地图瓦片下载,绘制管线
前端·javascript
惜茶12 小时前
vue+SpringBoot(前后端交互)
java·vue.js·spring boot
Arvin62713 小时前
Nginx 添加账号密码访问验证
运维·服务器·nginx
HIT_Weston14 小时前
41、【Agent】【OpenCode】本地代理分析(五)
javascript·人工智能·opencode
前端Hardy14 小时前
前端必看!LocalStorage这么用,再也不踩坑(多框架通用,直接复制)
前端·javascript·面试
前端Hardy14 小时前
前端必看!前端路由守卫这么写,再也不担心权限混乱(Vue/React通用)
前端·javascript·面试