nginx配置之alias和root的区别
/想要把静态文件映射为某些URL,看了location的匹配规则,于是乎写成如下配置。
location ^~ /file/ {
root /file/;
index index.html;
}
发现一只是404的返回,不管怎么改就是不对。开始想自己理解有误。
其实虚拟目录应该写成alias的形式,root 只是把url给重写了,使得前端跟后端看到的请求不一样。
location ^~ /166file/ {
alias /166file_linux/;
}
引起这个误会的原因其实是nginx 的原生配置里初始化就是
location / {
root html;
index index.html index.htm;
}
自然的就认为匹配到html文件下,其实是nginx的home文件下的相对位置html。
所以自然讲到二者之间的区别:
1.alias后跟的指定目录是准确的,并且末尾必须加“/”,否则找不到文件
location /sohu/ {
alias /qq/
}
如果访问站点http://location/sohu访问的就是/qq/目录下的站点信息。
2.root后跟的指定目录是上级目录,并且该上级目录下要含有和location后指定名称的同名目录才行,末尾“/”加不加无所谓。
location /sina/ {
root /net/
}
如果访问站点http://location/sina访问的就是/sina/net目录下的站点信息。
3.一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯。