root
和 alias
指令之间有一个非常重要的区别。这种差异存在于 root
或 alias
中指定的路径的处理方式中。
root
:
location
部分会附加到root
部分- 最终路径为
root
+location
alias
:
location
部分将被替换为alias
部分- 最终路径为
alias
假设我们有配置:
location /static/ {
root /var/www/app/static/;
autoindex off;
}
在这种情况下,Nginx 将派生的最终路径是
/var/www/app/static/static
这将返回 404
,因为 static/
中没有 static/
这是因为 location
部分附加到 root
中指定的路径。因此,对于 root
,正确的方法是
location /static/ {
root /var/www/app/;
autoindex off;
}
另一方面,使用 alias
时,location
部分会被丢弃。所以对于配置:
location /static/ {
alias /var/www/app/static/; # 注意,这里的斜杆必不可少,但不会包含在最终生成的路径中
autoindex off;
}
最终路径将正确形成为:
/var/www/app/static
在某种程度上,这是有道理的。alias
只是让您定义一个新路径来表示现有的真实路径。location
部分是新路径,因此它被替换为真实路径。将其视为一个符号链接。
另一方面,root
并不是一个新路径,它包含一些信息,必须与其他信息进行比较才能生成最终路径。因此,location
部分被使用,而不是被丢弃。