一聚教程网:一个值得你收藏的教程网站

热门教程

Nginx 中如何通过 nginx.conf 配置虚拟目录映射不同物理路径

时间:2026-08-30 10:59:48 编辑:袖梨 来源:一聚教程网

Nginx 用 location + alias 或 root 实现虚拟目录映射,alias 适用于剥离 URL 前缀挂载独立 SPA(如 /admin/ → /var/www/admin/),root 则拼接路径适合同构子站;正则 location 可动态映射多项目;配置后须验证权限、路径存在性及日志中的实际文件路径。

Nginx 通过 `location` + `alias` 或 `root` 实现虚拟目录映射,核心是让某个 URL 路径前缀(如 `/admin/`、`/static/`)指向服务器上**非 根目录**的任意物理路径。关键不在“多写几个 server”,而在于同一 server 内精准控制路径映射逻辑。

用 alias 映射独立子应用(推荐 Vue/React 等 SPA)

当你要把 `/admin/` 这个 URL 前缀完整剥离,直接挂载到 `/var/www/admin/` 目录时,必须用 alias

  1. location 必须以斜杠结尾(如 /admin/),alias 后也必须带斜杠(/var/www/admin/
  2. 请求 /admin/js/app.js → 实际读取 /var/www/admin/js/app.js/admin/ 被完全去掉)
  3. Vue 项目需设 publicPath: "/admin/",否则资源路径会错位

用 root 映射子路径(适合简单静态页或嵌套结构)

如果用 root,Nginx 会把 location 路径拼接到 root 后面:

  1. location /test/ { root /var/www; } → 请求 /test/index.html 对应文件是 /var/www/test/index.html
  2. 相当于自动补了一层目录名,不适合挂载已打包好的独立应用(会多出一层路径)
  3. 适合管理多个同构子站,比如 /blog//docs/ 都在 /var/www 下各自建同名文件夹

用正则动态映射多项目(如按项目名路由)

需要根据 URL 中的变量部分(如项目名、版本号)灵活跳转,用 正则 location + alias

  1. location ~ ^/projects/([^/]+)/(.*)$ { alias /data/projects/$1/$2; }
  2. 访问 /projects/myapp/dist/main.js → 读取 /data/projects/myapp/dist/main.js
  3. 注意:正则中捕获的 $1$2 是纯路径片段,不带开头斜杠

配置后必须验证的三件事

写对不等于跑通,缺一不可:

  1. 权限到位:Nginx 工作进程(如 www-data)对目标目录有 r-x 权限;父目录至少要有执行(x)权限才能进入
  2. 路径真实存在:alias 后必须是绝对路径,且该目录已创建、非空(Nginx 不会自动建目录)
  3. 实际路径可查:开启 error_log debug 级别,看日志里 open() 调用的目标文件是否和你预期一致

热门栏目