Vue 项目 Nginx 部署路径差异分析与部署指南

差异产生的原因

1. 构建工具差异

  • 若依 Vue3 项目 :使用 Vite 构建,配置了 base: '/admin/' 路径前缀
  • UniApp 项目:默认使用相对路径引用静态资源

2. 资源引用方式不同

若依 Vue3 项目

javascript 复制代码
// 构建时会在所有资源路径前添加 /admin/ 前缀
// 例如:/admin/static/js/index-xxxx.js

UniApp 项目

html 复制代码
<!-- 使用相对路径引用资源 -->
<link rel="stylesheet" href="./assets/uni.xxxx.css" />
<script src="./static/js/app.xxxx.js"></script>

3. Nginx 路径匹配机制

当使用不同配置时,路径解析结果不同:

配置方式 请求路径 实际查找路径 结果
location /app/ { root /path; } /assets/style.css /path/assets/style.css ❌ 404
location / { root /path/app; } /assets/style.css /path/app/assets/style.css ✅ 成功

两种方式对比

方式一:子路径部署 (/app/)

nginx 复制代码
location /app/ {
    root /var/www/html/black_money;
    try_files $uri $uri/ /app/index.html;
}

优点

  • URL 结构清晰,便于多项目管理
  • 符合 RESTful 设计理念

缺点

  • 需要确保前端项目构建时正确配置公共资源路径
  • 需要额外的 Nginx 配置处理静态资源

方式二:根路径部署 (/)

nginx 复制代码
location / {
    root /var/www/html/black_money/app;
    try_files $uri $uri/ /index.html;
}

优点

  • 配置简单,兼容性好
  • 适合单项目部署场景

缺点

  • 多个项目时会有路径冲突
  • URL 结构不够清晰

部署建议

推荐方案:统一使用子路径部署

1. 修改 UniApp 构建配置

manifest.json 或构建配置中设置:

javascript 复制代码
publicPath: "/app/";
// 或
baseUrl: "/app/";

2. 统一的 Nginx 配置

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

    # 若依管理系统
    location /admin/ {
        root /var/www/html/black_money;
        try_files $uri $uri/ /admin/index.html;
    }

    # UniApp应用
    location /app/ {
        root /var/www/html/black_money;
        try_files $uri $uri/ /app/index.html;
    }

    # 静态资源统一处理
    location ~ ^/(admin|app)/.*\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        root /var/www/html/black_money;
        expires 1y;
        add_header Cache-Control "public, immutable";
        try_files $uri =404;
    }
}

故障排查步骤

  1. 检查构建配置:确认前端项目是否正确设置了公共资源路径
  2. 验证文件结构:检查部署目录中的文件组织是否正确
  3. 查看网络请求:使用浏览器开发者工具检查资源请求路径
  4. 检查 Nginx 日志:查看 access.log 和 error.log 定位具体错误

最佳实践

  1. 统一规范:团队内统一前端项目的部署路径规范
  2. 自动化部署:使用 CI/CD 工具自动处理构建和部署
  3. 环境隔离:不同环境使用不同的配置文件
  4. 文档记录:详细记录每个项目的部署要求和特殊配置
相关推荐
两点王爷10 分钟前
一个快速加载面和多面数据的html测试页面(可以导出geojson数据文件)
前端·html·gis
热爱前端的小张12 分钟前
第四章 接口和类型兼容性
前端
hunterandroid13 分钟前
[鸿蒙从零到一] HarmonyOS 资源管理与多语言适配实战
前端
用户693717500138418 分钟前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
无人生还24 分钟前
第 1 篇:从 Vue3 到 React 的思维转变
前端·vue.js·react.js
爱分享的程序猿-Clark1 小时前
【前端分享】vue开发项目,如何实现 从A页面跳转到B页面,并传值!
前端·javascript·vue.js
breeze jiang1 小时前
从原生事件到 React 组件化:用状态驱动模型加载进度 UI
前端·react.js·ui
徐小夕1 小时前
花了3天,我写了一款开源AI公众号编辑器
前端·vue.js·github
PBitW2 小时前
git 中容易遗忘的点 (二) ⚡⚡⚡
前端·git·面试
Hilaku2 小时前
2026 年前端大洗牌:React 服务端到 Vite 的底层重构
前端·javascript·程序员