Nginx虚拟目录alias和root的区别
nginx中alias标签和root标签到底有哪些区别呢?
1.alias指定的目录是location匹配访问的path目录下的文件,直接从alias的目录下查找,并且alias指定的目录后面必须要加上"/"符号。;
注:alias虚拟目录配置时,location匹配的目录如果后面不带"/",那么访问的地址的目录后面加不加"/"不影响访问,访问时它会自动加上"/";但是如果location匹配的目录后面加上"/",那么访问的地址的目录必须要加上"/",访问时它不会自动加上"/"。如果不加"/",访问就会找不到你想要的资源。
2.root指定的目录是location匹配访问的目录的上一级目录,这个目录一定要是真实存在root指定目录下的;root目录配置中,location匹配的目录后面带不带"/",都不会影响访问。
例如:(nginx配置的域名是www.baidu1.com)
<1>
location /baidu/ {
alias /www/baidu/;
}
在上面alias虚拟目录配置下,访问http://www.baidu1.com/baidu/ceshi.html 真实路径是/www/baidu/ceshi.html。
上段案例也可用root目录配置:
location /baidu/ {
root /www/;
}
两者配置后的访问效果是一样的!
<2>
上面的案例中alias的虚拟目录名和location匹配访问的目录名是一样的,所以可以直接改成root目录配置,那要是不一样呢?
例如:
location /aaa/ {
alias /www/baidu/;
}
访问http://www.baidu.com/aaa 的时候就会去/www/baidu/ 下查找资源,这样的话,就不能直接改成root目录配置。
如果非要改成root目录配置,就只能在/www下将baidu目录同步为aaa目录,如下:
location /aaa/ {
root /www/;
}
# ln -s /www/aaa /www/baidu/
即保持/www/aaa和/www/baidu 内容一样,这样访问http://www.baidu.com/aaa 的时候也会去/www/baidu/ 下查找资源