Nginx知识讲解——location匹配模式详细讲解

一、引言

众所周知在nginx.conf配置文件中,可以配置多个虚拟主机,那么在虚拟主机中需要配置一个location。 那这个location是有何作用呢? location有几种匹配模式?,几种匹配模式之间的优先级又是怎么样的? 那么,带着这几个问题来看今天所要讲解的文章。希望大家对nginx配置文件有进一步对了解,也希望给大家带来帮助,谢谢!!!

二、location有何作用? 几种匹配方式?

location有“定位”的意思,根据请求不同的URL来进行不同的处理。在虚拟主机中(server),location配置是必不可少的,可以把网站不同的部分定位到不同的处理方式上。

location大致可以分为三种匹配。

1 location = patt {} 精准匹配、2  location patt {} 一般匹配、3 location ~ patt {} 正则匹配

三、location匹配模式之间的优先级顺序

1 、精准匹配 VS 一般匹配

       我们来看下这段配置,左边是精准匹配,右边是一般匹配。 当我们访问/index.html的时候,按道理两个location都能匹配上。由于精准匹配优先级比一般匹配大,所以会访问到/var/www/html这个目录下的index.html页面。

        location = /index.html {                                              location /index.html {

             root   /var/www/html;                                                 root /usr/local/nginx/html;

            index   index.html index.htm;                                     index index.html index.htm;

        }                                                                                 }

2、一般匹配 VS 正则匹配

        如果配置中没有精准理匹配,那么那我们nginx会先找一般匹配,如果找到了一般匹配,nginx也不会里面返回的结果的。而是会把这个一般匹配先记忆好,然后再去找正则匹配。如果正则匹配成功,则会覆盖之前记忆,采用正则。反之如果正则没有匹配上,则采用之前记忆好的规则。

        下面这比较,当我们ip或者域名后面不输入任何路径,会默认有一个/,我们nginx先是匹配到一般匹配,然后保存记忆。再去找正则匹配,刚刚好正则匹配也是能匹配上的,最后也是会访问到/var/www/html目录下。

        location ~  / {                                                           location  / {

             root   /var/www/html;                                                 root /usr/local/nginx/html;

            index   index.html index.htm;                                     index index.html index.htm;

        }                                                                                 }

3、一般匹配 VS 一般匹配

         当我们只有一般匹配的时候,那我们的优先级的顺序又是什么呢? nginx会采用匹配长度较长的一般匹配的规则来使用。当我们在浏览器输入路径后面是/index.html的时候,两个location都会匹配上,但是其中有一个一般匹配“location /index.html”,它匹配上的字符更多,则采用它定义的规则使用。最后会访问到/var/www/html目录下。

        location  /index.html {                                                location  / {

             root   /var/www/html;                                                 root /usr/local/nginx/html;

            index   index.html index.htm;                                     index index.html index.htm;

        }                                                                                 }

4、总结

       可能经过上面3个比较,可能描述的是太清楚,那在这里我们在总结一下location解析过程。

       1、首先判断是否有命中精准匹配,如果有命中,则立即返回结果并结束解析过程。

      2、如果没有命中精准匹配,则进行一般匹配,如果有命中一般匹配。保存匹配字符最多的命中结果(只保存,不退出

      3、继续判断正则表达式的解析结果,按配置中表达式顺序为准。从上开始匹配,一旦匹配成功1个,立即返回结果,并退出解析过程。如果没有匹配成功,则取一般匹配保存的结果为准。

 

最后,本章用文字来进行表达效果可能不太好,请原谅小编的表达能力有限。如有不懂的地方请评论告诉小编,小编一定加以改正!!!

你可能感兴趣的:(Nginx从小白变小黑)