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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据专业学什么,应该学习什么语言

    大数据专业学什么,应该学习什么语言大数据(bigdata),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。目前,

    2022年8月6日
    3
  • 【Java】Java双端队列Deque使用详解

    【Java】Java双端队列Deque使用详解Deque是一个双端队列接口,继承自Queue接口,它们共同的实现类是LinkedList。Deque的功能很强大:代替普通队列Queue:先进先出、队尾进队头出可以作为双端队列:队尾和队头都可以进出还可以作为堆栈使用:先进后出、只能从一端进出注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。jdk文档中关于Deque的使用介…

    2022年7月14日
    18
  • 正视自己,金无足赤——BCH不断发现与修正缺陷

    正视自己,金无足赤——BCH不断发现与修正缺陷

    2022年4月2日
    43
  • SQL 笛卡尔积现象

    SQL 笛卡尔积现象笛卡尔积的出现是在多表进行联合查询的时候会出现的一种情况。比如有两张表:表一:表二:在进行查询的时候:selectstudentname,SubjectnamefromStudent,subject会出现下面的情形,也就是笛卡尔现象,表一有5条记录,表二有3条记录,那么对于第一张表而言有5种选择,而对于第二张表来说有3种选择。所以结果就是5*3种选…

    2022年7月27日
    6
  • goland 2021.1.3 激活(在线激活)

    goland 2021.1.3 激活(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    518
  • RC低通滤波器_滤波器的基本原理

    RC低通滤波器_滤波器的基本原理先来几个不错的资源链接:1.RC滤波器截止频率在线计算器:http://www.eechina.com/tools/rc_filter_cutoff_frequency.html2.详谈一阶RC低通滤波器如何过滤高频噪声(网上不错的一个帖子)http://www.elecfans.com/instrument/631912.html3.【滤波器学习笔记】一阶RC低通滤波(下页截图来源)…

    2022年4月19日
    71

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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