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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • list数组遍历时能不能使用remove()方法,要注意什么

    list数组遍历时能不能使用remove()方法,要注意什么list数组遍历时能不能使用remove()方法,要注意什么

    2022年4月23日
    68
  • 使用 Preload&Prefetch 优化前端页面的资源加载「建议收藏」

    使用 Preload&Prefetch 优化前端页面的资源加载「建议收藏」对于前端页面来说,静态资源的加载对页面性能起着至关重要的作用。本文将介绍浏览器提供的两个资源指令-preload/prefetch,它们能够辅助浏览器优化资源加载的顺序和时机,提升页面性能。一、从一个实例开始如上图所示,我们开发了一个简单的收银台,支付过程中可以展开优惠券列表选择相应的券。从动图可以看到,列表第一次展开时,优惠券背景有一个逐渐显示的过程,体验上不是很好。问题的原因也很明显,由于背景使用了视觉特意设计的图片,优惠券列表展开时需要去加载图片,背景渐显的过程实际上就是图片加载的过程

    2025年6月25日
    4
  • webstorm如何激活(在线激活)

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

    2022年3月14日
    124
  • AEJoy ——表达式代码列表和示例(四)【代码详解】「建议收藏」

    bounce表达式系列惯性bounce表达式这个反弹表达式允许在你的层位置有一个弹性的感觉,效果图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5TFA2Glo-1638214074097)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7d3e186d50e74ee09ce97abe381beae9~tplv-k3u1fbpfcp-watermark.image?)]表达式amp=.1;freq

    2022年4月13日
    49
  • Java中的Scanner(详解常见用法)

    Java中的Scanner(详解常见用法)OJ中遇到的问题和例子:doublenextDouble(),floatnextFloat(),intnextInt()等与nextLine()连用时都存在遗留的换行符影响nextLine()读取输入的问题,解决的办法是:在每一个next()、nextDouble()、nextFloat()、nextInt()等语句之后加一个nextLine()语句,将被next()去掉的…

    2022年7月8日
    21
  • yaxim

    yaxim

    2021年9月2日
    63

发表回复

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

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