在 Nginx 配置中,root 和 alias 都用于定义文件路径,但它们的行为有重要区别,特别是 路径拼接方式 和 末尾斜杠 (/) 的影响。
1. root 和 alias 的区别
(1) root 指令
作用:root 会将 location 的 URI 拼接到 root 路径后面,形成完整的文件路径。
语法:
nginx
location /prefix/ {
root /path/to/files;
...
}
访问逻辑:
text
请求 URI: /prefix/file.txt
实际路径: /path/to/files/prefix/file.txt
示例:
nginx
location /static/ {
root /var/www/html;
}
访问 /static/hello.html → 实际读取 /var/www/html/static/hello.html
(2) alias 指令
作用:alias 会 直接替换 location 的 URI 部分,不会拼接 location 路径。
语法:
nginx
location /prefix/ {
alias /path/to/files/;
...
}
访问逻辑:
text
请求 URI: /prefix/file.txt
实际路径: /path/to/files/file.txt (/prefix/ 被替换)
示例:
nginx
location /images/ {
alias /var/www/media/;
}
访问 /images/cat.jpg → 实际读取 /var/www/media/cat.jpg(/images/ 被替换)
2. 末尾斜杠 (/) 的影响
(1) root 末尾加不加 / 不影响
root /path/to/files 和 root /path/to/files/ 效果相同。
因为 root 只是指定基础目录,Nginx 会自动处理路径拼接。
(2) alias 末尾必须加 /(推荐)
✅ 正确写法:
nginx
location /prefix/ {
alias /path/to/files/; # 末尾带 /
}
访问 /prefix/file.txt → /path/to/files/file.txt
❌ 错误写法(可能导致 404):
nginx
location /prefix/ {
alias /path/to/files; # 末尾不带 /
}
访问 /prefix/file.txt → /path/to/filesfile.txt(路径错误!)