Nginx中root指令和alias指令的区别

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上去)。