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. 文档记录:详细记录每个项目的部署要求和特殊配置
相关推荐
代码搬运媛4 小时前
Jest 测试框架详解与实现指南
前端
counterxing5 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
wangqiaowq5 小时前
windows下nginx的安装
linux·服务器·前端
之歆6 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜6 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite
Maimai108086 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
kyriewen8 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
humcomm8 小时前
元框架的工作原理详解
前端·前端框架
canonical_entropy8 小时前
Attractor Before Harness: AI 大规模开发的方法论
前端·aigc·ai编程
zhangxingchao9 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端