最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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:
- location 必须以斜杠结尾(如
/admin/),alias 后也必须带斜杠(/var/www/admin/) - 请求
/admin/js/app.js→ 实际读取/var/www/admin/js/app.js(/admin/被完全去掉) - Vue 项目需设
publicPath: "/admin/",否则资源路径会错位
用 root 映射子路径(适合简单静态页或嵌套结构)
如果用 root,Nginx 会把 location 路径拼接到 root 后面:
-
location /test/ { root /var/www; }→ 请求/test/index.html对应文件是/var/www/test/index.html - 相当于自动补了一层目录名,不适合挂载已打包好的独立应用(会多出一层路径)
- 适合管理多个同构子站,比如
/blog/、/docs/都在/var/www下各自建同名文件夹
用正则动态映射多项目(如按项目名路由)
需要根据 URL 中的变量部分(如项目名、版本号)灵活跳转,用 正则 location + alias:
location ~ ^/projects/([^/]+)/(.*)$ { alias /data/projects/$1/$2; }- 访问
/projects/myapp/dist/main.js→ 读取/data/projects/myapp/dist/main.js - 注意:正则中捕获的
$1、$2是纯路径片段,不带开头斜杠
配置后必须验证的三件事
写对不等于跑通,缺一不可:
-
权限到位:Nginx 工作进程(如 www-data)对目标目录有
r-x权限;父目录至少要有执行(x)权限才能进入 - 路径真实存在:alias 后必须是绝对路径,且该目录已创建、非空(Nginx 不会自动建目录)
-
实际路径可查:开启 error_log debug 级别,看日志里
open()调用的目标文件是否和你预期一致