Nginx 用 location + alias 或 root 实现虚拟目录映射,alias 适用于剥离 URL 前缀挂载独立 SPA(如 /admin/ → /var/www/admin/),root 则拼接路径适合同构子站;正则 location 可动态映射多项目;配置后须验证权限、路径存在性及日志中的实际文件路径。
Nginx 通过 `location` + `alias` 或 `root` 实现虚拟目录映射,核心是让某个 URL 路径前缀(如 `/admin/`、`/static/`)指向服务器上**非 根目录**的任意物理路径。关键不在“多写几个 server”,而在于同一 server 内精准控制路径映射逻辑。当你要把 `/admin/` 这个 URL 前缀完整剥离,直接挂载到 `/var/www/admin/` 目录时,必须用 alias:
/admin/),alias 后也必须带斜杠(/var/www/admin/)/admin/js/app.js → 实际读取 /var/www/admin/js/app.js(/admin/ 被完全去掉)publicPath: "/admin/",否则资源路径会错位如果用 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 是纯路径片段,不带开头斜杠写对不等于跑通,缺一不可:
r-x 权限;父目录至少要有执行(x)权限才能进入open() 调用的目标文件是否和你预期一致