root 与 alias
约 448 字大约 1 分钟
布欧-Lewyon
2026-05-15
首页 › Nginx › 静态资源服务(在新窗口打开) › root 与 alias
root 和 alias 都用于指定文件路径,但两者的处理逻辑有细微但关键的差异。
root
root 将完整 URI 拼接到路径后面:
location /static/ {
root /var/www/html;
}请求 /static/img/logo.png → 文件路径:/var/www/html/static/img/logo.png
alias
alias 用指定的路径替换 location 的匹配部分:
location /static/ {
alias /var/www/files/;
}请求 /static/img/logo.png → 文件路径:/var/www/files/img/logo.png
关键区别
| root | alias | |
|---|---|---|
| 路径拼接 | 完整 URI 拼接到 root 后 | location 匹配部分被替换 |
| 示例 | root /data; → /data/foo/bar | alias /data; → /data/bar |
| 末尾斜杠 | 不影响 | 重要:alias 末尾斜杠影响路径拼接 |
alias 末尾斜杠的问题
# ❌ 错误:末尾无斜杠,路径拼接异常
location /static/ {
alias /var/www/files; # /static/file.txt → /var/www/filesfile.txt
}
# ✅ 正确:末尾有斜杠
location /static/ {
alias /var/www/files/; # /static/file.txt → /var/www/files/file.txt
}
root没有这个斜杠问题。因此尽量优先使用root,只有在需要将 URI 映射到不同目录时才用alias。
正则 location 中的 alias
# 正则匹配时,alias 需要使用捕获组
location ~ ^/images/(.+\.(jpg|png))$ {
alias /data/uploads/$1;
}何时用 alias
# 场景:将 URL 路径映射到不同目录(不保留前缀)
# URL /downloads/ → 文件实际在 /var/data/packages/
location /downloads/ {
alias /var/data/packages/;
}
# 等价的 root 写法需要多一层目录
location /downloads/ {
root /var/data; # → /var/data/downloads/xxx
}小结
root将完整 URI 拼接到路径末尾,适用于 URI 路径与文件系统路径一致时。alias用指定路径替换 location 匹配的部分,适用于需要重映射目录结构时。alias末尾的斜杠会影响路径拼接,务必与之匹配。- 简单场景优先用
root,alias只在需要路径重映射时使用。
上一节:配置文件结构 下一节:location 匹配规则
