root指令和alias指令的作用都是将url path映射到对应的dir path上去。他们具体区别如下:
root指令
root指令映射到的目标路径是root+location的结果:
location /data/ {
root /var/www;
}
这段代码匹配/data/index.html
时成功,最后会响应/var/www/data/index.html
中的内容。
alias指令
alias用于将匹配到的url映射到另外一个path:
location ^~ /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri =404;
}
这段代码在匹配/.well-known/acme-challenge/data/test.html
时成功,最后会响应/var/www/challenges/data/test.html
中的内容,注意:最后查找的path不包含location中的内容。
注意,alias指令需要location的条件有个前缀匹配(即"^"这个符号),在下面这个例子中:
location ~ /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri =404;
}
这将不会有任何意义,它会将所有包含/.well-known/acme-challenge/
的url都指定到/var/www/challenges/
这个目录,而不管这个url的其他内容(即不会像上面那样把url后面的data/test.html
补充到alias指定的path上去)。