您的位置:首页 > 运维架构 > Nginx

Nginx(四)Location配置详解之精准匹配

2018-06-13 21:03 651 查看
一、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、正则命中,顺序有所谓,因为是从前往后命中的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  location 匹配 过程