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配置详解之精准匹配的主要内容,如果未能解决你的问题,请参考以下文章