nginx 中用 alias 实现多项目独立静态资源托管,核心是每个 location + alias 块按路径前缀精准映射各自物理目录,斜杠必须严格对齐,spa fallback 需带对应前缀,公共资源可统一挂载复用。

在 Nginx 中用 alias 实现多项目独立静态资源托管,核心是让每个项目 URL 路径精准映射到各自物理目录,互不干扰、不依赖根目录结构。它不是靠“一个 root 管所有”,而是靠多个 location + alias 块按路径前缀分治。
每个项目配一个 location + alias 块
不同前端项目(如管理后台、用户前台、文档中心)部署在不同子路径下,就为每个路径单独写一段配置:
-
/admin/ → /var/www/admin/:管理后台 Vue 构建产物,publicPath 设为
'/admin/' - /api-docs/ → /opt/swagger-ui/:Swagger UI 文档,完全独立于主站目录
- /uploads/ → /var/www/uploads/:用户上传的头像、附件等,常由后端写入,需直接暴露给浏览器
这些块可共存于同一 server 块中,Nginx 按最长匹配优先,不会冲突。
路径末尾斜杠必须严格对齐
alias 的行为高度依赖斜杠位置,错一个就会拼错路径导致 404 或越权读取:
-
location /admin/ { alias /var/www/admin/; }✅ 正确 —— 请求/admin/js/app.js映射到/var/www/admin/js/app.js -
location /admin/ { alias /var/www/admin; }❌ 错误 —— 可能变成/var/www/adminjs/app.js(粘连) -
location /admin { alias /var/www/admin/; }❌ 危险 —— 匹配/admin123也会命中,前缀未闭合
SPA 路由兜底要带前缀
Vue/React 等单页应用启用 history 模式时,深层路由(如 /admin/user/123)需要回退到对应项目的 index.html:
-
try_files $uri $uri/ /admin/index.html;✅ 正确 —— fallback 路径含/admin/前缀,与 alias 上下文一致 -
try_files $uri $uri/ /index.html;❌ 失效 —— 浏览器请求的是/admin/xxx,但返回的是根目录下的index.html,JS 路由初始化错误
公共资源可跨项目统一挂载
图标、字体、通用 JS 库等可放在独立目录(如 /mnt/shared/assets/),再用额外 alias 挂载:
location /assets/ { alias /mnt/shared/assets/; }- 各项目 HTML 或 CSS 中引用
/assets/icons/logo.png,Nginx 直接从该磁盘路径读取 - 该配置与任何
root或其他alias完全解耦,真正实现跨文件系统复用











