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


相关推荐

  • gamma校正什么意思_串联滞后校正对系统性能的影响

    gamma校正什么意思_串联滞后校正对系统性能的影响【Gamma的由来】首先,要区分照度和亮度,照度是一个客观的量,亮度是一个主观的量,不同的人看相同照度的物体所感受到的亮度是不一样的。对于照度线性变化的物体,人眼感受到的亮度不是线性的。人眼对于低照度的物体更敏感,这意味着对于照度为2、3、4的三个物体,人眼能够区分,而对于照度为222、223、224的三个物体,人眼不能区分。其次,我们存储颜色的空间是有限的,常用的RGBA32格式,每个颜色通道只有8位,最多能表示256种照度,而现实世界中的照度远超256。基于人眼对照度的感知特点,我们不能线性的去

    2022年9月22日
    3
  • Hackbar 使用教程

    Hackbar 使用教程Hackbar使用教程什么是Hackbar?Hackbar是一个Firefox的插件,它的功能类似于地址栏,但是它里面的数据不受服务器的相应触发的重定向等其它变化的影响.有网址的载入于访问****,联合查询**,各种编码,数据加密功能.这个Hackbar可以帮助你在测试SQL注入**,XSS漏洞和网站的安全性****,主要是帮助开发人员做代码的安全审计**,检查代码,寻找安全漏洞———…

    2022年4月26日
    85
  • 公共NTP服务器地址大全

    公共NTP服务器地址大全NTP是NetworkTimeProtocol的简称,也就是网络时间协议。而NTP服务器是可以通过网络来同步时间的服务器。Linux下使用ntpdate命令进行校时:ntpdatentp.sjtu.edu.cn· 地区 NTP服务 NTP地址 国内知名公共NTP服务器地址 ChinesePublicNTPServer 国家授时中心NTP服务器 NTSCNTPServer ntp.ntsc.ac.cn

    2022年6月12日
    68
  • Web Server与App Server

    Web Server与App ServerWebServer 常见的 WebServer 有 ApacheServer 与 Nginx ApacheHttpSe 是 Apache 软件基金会下的一个项目 是一款开源的 HTTP 服务器软件 它也可以作为邮件代理服务器 通用的 TCP 代理服务器 Nginx 之前有配置它的博文 大多数用它来做负载均衡 这两者基本相同 HTTP 服务器本质上也是一种应用程序 通常运行在

    2025年12月13日
    6
  • 小程序 轮播图之自动适应宽高度

    小程序 轮播图之自动适应宽高度以微信小程序为例:wxml文件:<!–1.轮播图外层容器swiper2.每一个轮播项swiper-item3.swiper标签存在默认样式1.width100%2.height150pximage存在默认宽度和高度320*2403.swiper高度无法实现由内容撑开4.先找出来原图的宽度和高度等比例给swiper定宽度和高度原图的宽度和高度750x300swiper宽度/.

    2022年5月21日
    41
  • 数据库分类

    数据库分类数据库介绍及分类:http://blog.51cto.com/13178102/2064041

    2022年6月15日
    28

发表回复

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

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