nginx的root和alias指令的区别
在配置nginx的location时候,用到了alias和roo指令,特地记录下他们的一点区别,避免以后踩坑。
location /img/ {
alias /var/www/image/;
}
location /img/ {
root /var/www/image;
}
在这两个location中:
- alias,可以理解为目录别名的定义,url访问/img/时,nginx会自动去/var/www/image/目录找文件;
- root,可以理解是最上层目录的定义,url访问/img/时,nginx会去/var/www/image/img/目录下找文件。
需要特别注意的是:alias后面必须要用‘/’结束,否则会把目录路径当成是文件路径,从而获取不到真正请求的文件,而root则可有可无
在nginx文档中还有这么一句很重要的话:If alias is used inside a location defined with a regular expression then such regular expression should contain captures and alias should refer to these captures.
意思就是说,当alias用于location中时,如果该location的定义使用了正则表达式,那么这正则表达式必须要有capture,并且alias中要引用这些capture。
可以借助下面配置理解这段话:
location ~ /img/(.*\.png)$ {
alias /var/www/image/$1;
}
这里我们必须要利用$1部分,否则nginx会报错。
深究为什么要一定要引用capture,可以参考 stackoverflow
参考:
https://stackoverflow.com/questions/21705198/nginx-redirect-loop-index-html
http://nginx.org/en/docs/http/ngx_http_core_module.html#alias