nginx location 匹配_nginx的location例子

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

大家好,又见面了,我是你们的朋友全栈君。

作为一名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://juejin.im/post/5c8492b1e51d453ec256bf0b

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106941.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java工厂模式_java工厂模式

    java工厂模式_java工厂模式java工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式(SimpleFactoryPattern)属于类的创新型模式,又叫静态工厂方法模式(StaticFactoryMethodPattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式就是通过一个”全能类”,根据外界传递的信息来决定创建哪个具体类的对象。如下图(懒得…

  • python merge函数_pandas replace函数

    python merge函数_pandas replace函数在pandas中如果我们想将两个表格按照某一主键合并,我们需要用到merge函数。pd.merge(dataframe_1,dataframe_2,how=”inner”)参数how有四个选项,分别是:inner、outer、left、right。inner是merge函数的默认参数,意思是将dataframe_1和dataframe_2两表中主键一致的行保留下来,然后合并列。outer是相对于inner来说的,outer不会仅仅保留主键一致的行,还会将不一致的部分填充Nan然后保留下来。

    2022年10月23日
  • ICE初识

    ICE初识
    ICE:InternetCommunicationsEngine
    一种适用于异种环境的面向对象中间件平台
    他为我们提供了除DCOM,CORBA,JAVARMI,.NETRemoting,WebService,SOAPRPC以外的一种远程调用方式。
    更重要的是ICE是一种跨操作系统跨语言的远程调用方式(支持.NET1.1MONO1.0)。

    主页在:http://www.zeroc.com/index.html

  • MFC之COleVariant类

    MFC之COleVariant类COleVariant本质上是一个枚举,用同一种类型来表达不同的子类型。如同boost中的variant。 COleVariant类是对VARIANT结构的封装。  VARIANT结构包含两部分。其一是VARTYPE型的成员变量vt;其二是个联合类型,这个联合包含了VC常用的几乎所有类型。因为联合用的是相同的存储空间,因此对联合的内容的解释依赖于vt。  例如,  若vt的…

  • switch中的continue和break区别[通俗易懂]

    switch中的continue和break区别[通俗易懂]今天c程设期末考试,突然有一道选择题是关于switch中的break和continue问题。若switch外部没有循环,则break和continue没有区别。若switch外部还有循环,{一.若break,continue在switch外部,则二者作用的是外部循环。二.若break,continue在switch内部,则break作用于switch,continue作用于外部循环。…

  • linux目录结构详解_简述linux系统中的目录结构

    linux目录结构详解_简述linux系统中的目录结构前言平常linux系统用的也不少,那么linux下的每个目录都是用来干什么的,小伙伴们有仔细研究过吗?让我们来了解下吧Linux系统目录结构登录系统后,在当前命令窗口下输入命令:[root@

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号