Nginx虚拟目录配置核心是location配合alias或root:alias用于剥离URL前缀挂载独立应用(需路径末尾均带斜杠),root用于嵌套静态页(自动拼接路径);正则location支持动态映射;配置后须验证权限、路径存在性及日志中的实际解析路径。

Nginx 配置虚拟目录,核心是用 location 块配合 alias 或 root 指令,把某个 URL 路径(如 /admin/)映射到服务器上任意物理路径(如 /var/www/admin/),不依赖网站根目录结构。关键不是新增 server,而是精准控制路径解析逻辑。
用 alias 映射独立子应用(推荐 Vue/React/PHP 后台)
当你要完全剥离 URL 前缀、挂载一个完整应用时,必须用 alias:
-
location路径末尾带斜杠(如/admin/),alias路径末尾也必须带斜杠(如/var/www/admin/) - 请求
/admin/js/app.js→ 实际读取/var/www/admin/js/app.js(/admin/被彻底去掉) - 前端 SPA(如 Vue)需设置
publicPath: "/admin/",否则资源加载 404 - PHP 场景下,
alias不能单独生效,还需显式设置root并手动拼接SCRIPT_FILENAME:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
用 root 映射嵌套静态页(适合同构子站)
如果只是在主站下放几个简单页面,且目录名与 URL 路径一致,可用 root:
-
location /blog/ { root /var/www; }→ 请求/blog/index.html对应文件是/var/www/blog/index.html - 它会自动把 location 路径拼接到 root 后面,相当于多了一层目录名
- 不适合挂载已打包好的独立应用(比如直接丢一个 Vue dist 文件夹进去,会因多出
/blog/前缀导致资源路径错乱) - Windows 下路径要用双引号包裹,如
root "D:/htdocs";
正则动态映射多项目(按路径变量跳转)
需要根据 URL 中的可变部分(如项目名、版本号)灵活路由时,用正则 location:
- 示例:
location ~ ^/apps/([^/]+)/(.*)$ { alias /data/apps/$1/$2; } - 访问
/apps/myapp/v1.2/main.js→ 实际读取/data/apps/myapp/v1.2/main.js - 注意:
$1、$2是纯路径片段,不含开头斜杠;alias后仍需写绝对路径 - 正则匹配优先级高于普通 location,建议放在配置靠前位置
配置后必须验证的三件事
写对 ≠ 跑通,缺一不可:
-
权限到位:Nginx 工作用户(如
www-data或nginx)对目标目录有r-x权限;父目录至少要有执行(x)权限才能进入 -
路径真实存在:
alias后必须是已创建、非空的绝对路径;Nginx 不会自动建目录 -
实际路径可查:开启
error_log /path/to/error.log debug;,看日志中open()调用的目标路径是否和你预期一致


















