Nginx得Location配置详解之精准匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx得Location配置详解之精准匹配相关的知识,希望对你有一定的参考价值。

一、location 的定义

        location 有“定位”的意思,根据Uri来进行不同的定位。

        在虚拟主机的配置中,是必不可少得,location可以把网站的不同部分,定位到不同的处理方式上。

二、location 的语法

        location [=|~|~*|^~] patt{

    

        }

        中括号可以不写任何参数,此时称为一般匹配,也可以写参数

        因此,大类新可以分为3种:

        location=patt{}[精准匹配]

        location  patt{} [一般匹配]

        location ~patt{}[正则匹配]

    1、如何发挥作用?

        首先看有没有精准匹配,如果有,则停止匹配过程。

        location=patt{

                    config A

        }

        如果$uri==patt,匹配成功,使用configA

        

        location =/ {

                root   /var/www/html;

                index  index.htm index.html;

           }


            location / {

                root   html;

                index  index.html index.htm;

            }

        如果访问 http://xxx.com/

        定位流程是:

        1.精准匹配中 “/”,得到index页为 index.htm

        2.再次访问 /index.htm,此次内部跳转uri已经是“/index.htm”

            根目录为/usr/local/nginx/html

        3.最终结果,访问了 /usr/local/nginx/html/index.htm


    2.正则表达式匹配:

        

        location / {

                root   html;

                index  index.html index.htm;

            }



          location ~ image{

                   root /var/www/image;

                   index index.html;

            }

        如果访问 http://xx.com/image/logo.png

        此时,“/”与“/image/logo.png”匹配

        同时,“/image”正则与“image/logo.png”也能匹配,谁发挥作用?

        正则表达式的成功将被使用


        图片真正会访问 /var/www/image/logo.png

        



        

       location / {

                root   /usr/local/nginx/html;

                index  index.html index.htm;

            }


        location /foo {

                root /var/www/html;

                index index.html;

            }

        此时我们访问 xxx.com/foo

            对于uri “/foo”,两个location的patt都能匹配他们

            既“/”能从左前缀匹配“/foo”,“/foo”也能左前缀匹配“/foo”,

            此时,真正访问 /var/www/html/index.html

            原因:“/foo”匹配的更长,因此使用之。


三、总结:

        location 匹配流程图:

        技术分享图片

       

 location的命中过程是这样的:

        1.先判断精准命中,如果命中,立即返回结果并结束解析过程。

        2.判断普通命中,如果有多个命中,记录下来最长的命中结果,(注意:记录但不结束,最长的为准)

        3.继续判断正则表达式的解析结果,按配置里的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功1个,立即返回结果,并结束解析过程。


    延伸分析:

        1、普通命中,顺序无所谓,是因为按命中的长短来确定的。

        2、正则命中,顺序有所谓,因为是从前往后命中的。

以上是关于Nginx得Location配置详解之精准匹配的主要内容,如果未能解决你的问题,请参考以下文章

Nginx实践: Nginx语法之localtion

nginx中location配置及匹配详解

nginx location配置

nginx的location配置详解

Nginx系列Nginx之location

nginx的location配置详解