alias指令将url路径直接映射到服务器任意物理目录,不依赖root;需location与alias末尾均带/,用于托管独立静态资源如api文档;与root的拼接逻辑不同,alias是路径替换而非拼接。

Alias 指令用于把某个 URL 路径**直接映射到服务器上任意物理目录**,不依赖站点根目录(root),适合托管独立静态资源,比如 API 文档、跨盘素材、前端子项目等。
核心用法:路径前缀完全替换
alias 的本质是“去掉 location 匹配部分,再拼接剩余 URI”:
- location /docs/ { alias /var/www/swagger-ui/; }
→ 请求 /docs/index.html 对应文件 /var/www/swagger-ui/index.html - location /assets/ { alias /mnt/shared/assets/; }
→ 请求 /assets/icons/logo.png 实际读取 /mnt/shared/assets/icons/logo.png
注意:location 和 alias 值末尾都必须带 /(除非 alias 指向单个文件),否则拼接会错位,导致 404 或越权访问。
常见配置写法
正确示例(托管 Swagger UI):
location /api-docs/ {
alias /var/www/swagger-ui/;
index index.html;
try_files $uri $uri/ /api-docs/index.html;
}
说明:
- alias 后跟完整目录路径,结尾斜杠不可省
- try_files 支持前端路由刷新(如 /api-docs/?url=xxx)
- 不用额外声明 MIME 类型,Nginx 默认识别 .html/.js/.css 等
容易出错的点
配置后报 403 或 404?大概率是这些细节没对:
- 权限问题:确认 Nginx 工作用户(如 www-data)对 alias 目录有 r-x 权限(目录需执行 x 才能进入)
-
路径不存在:用
ls -l /var/www/swagger-ui/index.html验证文件真实存在,大小写、中文、括号都要完全一致 -
base href 冲突:若页面内硬编码了
<base href="/>%EF%BC%8C%E9%9C%80%E6%94%B9%E4%B8%BA%20<base%20href=">,否则 CSS/JS 加载路径错误 -
location 不以 / 结尾:写成
location /docs(无斜杠)会导致匹配过宽,URI 截断异常,务必写成location /docs/
和 root 的关键区别
别用 root 替代 alias,逻辑完全不同:
-
root:路径是拼接 →
root /var/www; location /static/→/var/www/static/xxx -
alias:路径是替换 →
alias /data/assets/; location /static/→/data/assets/xxx
想把 /static/ 映射到 /data/assets/ 这种跨根目录场景,只能用 alias。











