Nginx 的 alias 指令用于替换 location 匹配前缀以映射 URI 到实际目录,与 root 的拼接行为本质不同;需严格匹配末尾斜杠,不支持 if 块和正则未捕获用法,且 alias 下 index 不生效。

Nginx 的 alias 指令用于将请求的 URI 路径映射到文件系统中另一个实际目录,实现“路径别名”效果。它和 root 的行为有本质区别:alias 替换的是整个匹配的 location 前缀,而 root 是拼接路径。
alias 的核心行为:替换 location 前缀
当使用 alias 时,Nginx 会把匹配到的 location 路径部分完全移除,再将 alias 后指定的路径作为新的文件系统起点。
- 例如:
location /static/ { alias /data/assets/; }
请求/static/js/app.js→ 实际读取/data/assets/js/app.js(/static/被替换成/data/assets/) - 注意末尾斜杠:alias 值末尾是否带
/必须与 location 的写法严格对应,否则可能产生路径错位 - 不支持正则 location 中直接用未捕获的 alias;若 location 使用正则,需配合
$1等捕获变量手动拼接
alias 与 root 的关键区别
对比更直观:
-
location /img/ { root /var/www; }
→ 请求/img/logo.png对应文件是/var/www/img/logo.png(root 是“拼接”) -
location /img/ { alias /var/www/images/; }
→ 请求/img/logo.png对应文件是/var/www/images/logo.png(alias 是“替换”) - 常见错误:把 alias 写成和 root 一样的逻辑,导致 404
实用配置示例
以下为典型安全、清晰的 alias 用法:
- 静态资源映射:
location ^~ /media/ { alias /srv/uploads/; }
(^~确保前缀匹配优先,避免被正则覆盖) - 隐藏真实路径:
location /download/ { alias /opt/protected/files/; }
用户只能通过/download/report.pdf访问,无法猜出服务器真实路径 - 配合 index 指令(注意:alias 下 index 不生效,需显式重写或用 try_files)
注意事项与避坑点
alias 容易出问题的地方:
- location 和 alias 的末尾斜杠必须一致:
location /api/ { alias /opt/backend/; }✅location /api/ { alias /opt/backend }❌(少斜杠会导致路径粘连成/opt/backendfile) - 不能在 if 块中使用 alias(语法错误)
- 不支持在 rewrite 后动态生成 alias 路径;如需条件映射,建议用 map + root 或 try_files + internal 重定向
- 权限问题:确保 nginx 工作进程对 alias 目录有读取权限,且目录可执行(进入权限)










