nginx的root和alias指令的区别

作者: veaxen 分类: Nginx 发布时间: 2018-12-12 22:35

在配置nginx的location时候,用到了alias和roo指令,特地记录下他们的一点区别,避免以后踩坑。

location /img/ {
    alias /var/www/image/;
}

location /img/ {
    root /var/www/image;
}

在这两个location中:

  1. alias,可以理解为目录别名的定义,url访问/img/时,nginx会自动去/var/www/image/目录找文件;
  2. 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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据