第六章 Location详解(精准匹配)

6.1 Location 语法

定义: location表示定位的意思,根据URI进行定位。在虚拟主机配置中,location配置是极其重要的,可以把网站的不同部分定位到不同的处理方式上。
比如Php如何调用php解释器?
location语法
location [=||*|^~] patt {

}

6.2 Location 分类

中括号可以不写任何参数,此时称为一般匹配,也可以写参数,因此大致分为三大类:

  • location =patt {} //精准匹配

  • location patt{} //一般匹配

  • location ~ patt{} // 正则匹配

6.3 Location 作用优先级

1.方法

首先看是否有精准匹配,如果有则停止匹配过程。
location =patt {

configA

}

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

2.如何起作用
2.1 初始配置nginx.conf

2.1.png

2.2 测试结果*

2.2.png

如测试结果所示虽然精准匹配优先级最高但是在测试时我们直接输入的是ip,所以并未进入我们要求的/var/www/html/中的目录文件,服务器只能默认进入下面location(一般匹配)中的/usr/local/nginx/html/index.html中了。因为出现了Welcome to nginx。

下面我们进行一定反面修改验证 精准匹配的优先级是最高的。
2.3 反面修改配置nginx.conf

2.3.1

如上图所示我们将第一个location下的index处进行了修改。然后进行重启再次测试。

2.3.2
结果显示是404这说明了精准匹配生效了。
定位流程是:

  1. 首先精准匹配 “/“,得到了index.htm; 即:47.102.124.213/index.htm;
  2. 再次访问/index.htm,由于47.102.124.213/index.htm是个不存在路径,所以表现为404;因此转向一般匹配,内部跳转URI为:/usr/local/nginx/html/index.htm,但是该目录下不存在index.htm所以出现了404.

2.4 正面修改配置nginx.conf

2.4.1

测试结果
2.4.2
如上图测试结果所示发送请求:47.102.124.213/index.htm,要求匹配/index.htm,由结果可知选择了精准匹配。

2.5 扩展
2.5.1

如上图所示我又在中间添加了一个精准匹配;再次运行测试;

2.5.2

如上图测试结果所示发送请求:47.102.124.213/,要求匹配”/“;在此情况下,先匹配第2个location得到URI:/index.html;由/index.html再次匹配到第二个location最终访问到/usr/local/nginx/html/index.html.

6.4 Location 总结详解

图示总结

Locatio总结详图

文字总结

Loction命中过程:

  • 先判断精准命中,如果命中,立即返回结果并结束解析过程
  • 判断普通命中,如果有多个命中,记录下来最长的命中结果(注意:记录但不结束,最长为准)
  • 继续判断正则表达式的解析结果,按配置里的正则表达式顺序为准;
  • 由上到下开始匹配,一旦匹配成功1个,立即返回结果,并结束解析过程

    延伸分析:
    a:普通命中顺序无所谓,是因为按命中长短来确定的。
    b:正则命中,顺序无所谓,是因为从前往后命中的

评 论