资讯专栏INFORMATION COLUMN

nginx执行请求的工作原理之location匹配详解

jlanglang / 2870人阅读

摘要:作为一名,配置是我们必会的技能项之一。只有请求的路径与后面的字符串完全相等时,才会命中。举例表示该规则是使用正则定义的,区分大小写。举例匹配优先级最后,我们了解下的查找规则。

作为一名PHPer,配置nginx是我们必会的技能项之一。但是当用户请求到达nginx之后,是如何匹配到对应的配置项的呢?

location语法规则

首先我们先了解下location的语法规则,location语法规则大致可以分为两类

一类是指定URL地址:

location [ = | ~ | ~* | ^~ ] uri {
    ... 
}

另一类则是指定自定义名称:

location @name { 
    ... 
}

@name是对location设置的一个自定义名称,由@+自定义命名组成,一般用于try_files后面的内部请求,且自定义命名location中不可再嵌套自定义命名location

举例:

location @xuzheng{
    ...
}
location修饰符含义

上文我们提到location语法规则有一类是指定URL地址,其中运用了一些修饰符,下面我们看下这些修饰符的含义

1、 = 表示精确匹配。只有请求的url路径与后面的字符串完全相等时,才会命中。

举例:

location = / {
    ...
}

2、 ~ 表示该规则是使用正则定义的,区分大小写。

举例:

location ~ .php$ {
    ...
}

3、 ~* 表示该规则是使用正则定义的,不区分大小写。

举例:

location ~* .php$ {
    ...
}

4、^~ 是前缀匹配的一种,但是如果该符号后面的字符被匹配上,则被默认为最佳匹配,即采用该规则,不再进行后续的查找。

举例:

location ^~ /blogs {
    ...
}
location匹配优先级

最后,我们了解下location的查找规则。下面列出的location查找,从上到下的优先级为从高到低

1、等号类型,精确匹配
2、^~类型,前缀匹配,不支持正则,如果该符号后面的字符匹配被匹配上,则被默认为最佳匹配,不再继续往下查找
3、~~*类型,正则匹配,~区分大小写,~*不区分大小写
4、前缀匹配类型,如location / {}(表示任何以/开头的URL都匹配)或location /user {},只不过找到合适了还会继续往下找,直到找到最长匹配
注:使用正则匹配的规则时,顺序很重要,location只要找到第一个符合条件的配置规则就会停止查找,即使下面有更匹配的配置

总结 location匹配过程:

1、首先先检查使用前缀匹配(即字符串匹配)定义的location,选择最长匹配的项并记录下来
2、如果找到了精确匹配的location,也就是使用了=修饰符的location,结束查找,使用它的配置。如果没有找到合适精确匹配,则继续往下查找
3、如果找到了包含^~的前缀匹配,则停止查找,使用它定义的配置。如果没有找到合适的带^~符号的前缀匹配,则继续往下查找
4、如果找到了使用正则定义的location,则停止查找,使用它定义的配置。如果没有找到合适的正则匹配,则继续往下查找
5、使用前面记录的最长匹配前缀字符location。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40377.html

相关文章

  • docker进阶,nginx部署几个重要点详解以及开发流程---持续更新

    摘要:无论这个连接是外部主动建立的,还是内部建立的。协议有表示层数据的表示安全压缩。在整个发展过程中的所有思想和着重点都以一种称为的文档格式存在。 部署基础知识url:协议://网站地址:端口(/)路径地址?参数eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服务器 80端口:找服务器上提供服务的应用 nginx uri:/ab...

    KunMinX 评论0 收藏0
  • docker进阶,nginx部署几个重要点详解以及开发流程---持续更新

    摘要:无论这个连接是外部主动建立的,还是内部建立的。协议有表示层数据的表示安全压缩。在整个发展过程中的所有思想和着重点都以一种称为的文档格式存在。 部署基础知识url:协议://网站地址:端口(/)路径地址?参数eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服务器 80端口:找服务器上提供服务的应用 nginx uri:/ab...

    ytwman 评论0 收藏0
  • docker进阶,nginx部署几个重要点详解以及开发流程---持续更新

    摘要:无论这个连接是外部主动建立的,还是内部建立的。协议有表示层数据的表示安全压缩。在整个发展过程中的所有思想和着重点都以一种称为的文档格式存在。 部署基础知识url:协议://网站地址:端口(/)路径地址?参数eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服务器 80端口:找服务器上提供服务的应用 nginx uri:/ab...

    Tangpj 评论0 收藏0
  • 从一份配置清单详解Nginx服务器配置

    摘要:在本文中,我们继续延续前文,从前文给出的一份示例配置清单开始,详解一下服务器的各种配置指令的作用和用法。是否允许同时接收多个网络连接指令格式该指令默认为状态,意指每个一次只能接收一个新到达的网络连接。 showImg(https://segmentfault.com/img/remote/1460000015385948); 概述 在前面《Nginx服务器开箱体验》 一文中我们从开箱...

    kevin 评论0 收藏0
  • nginx+php执行请求工作原理

    摘要:工作原理首先先了解下常听说的,,,到底是什么关系,帮助了解的工作原理协议协议用来确定例如,也就是内容分发服务器传递过来什么数据,什么样格式的数据进程解释器是的协议进程解释器,每次启动时,需要经历加载文件初始化执行环境处理请求返 php工作原理 首先先了解下常听说的cgi,php-cgi,fastcgi,php-fpm到底是什么关系,帮助了解php的工作原理 cgi协议 cgi协议用来确...

    Cympros 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<