一文弄懂Nginx的location匹配的实现

一文弄懂Nginx的location匹配的实现,第1张

一文弄懂Nginx的location匹配的实现

本文的重点是详细介绍Nginx的位置匹配的实现。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值。有必要的朋友陪我去了解一下。

因为精英团队是把前端和后端分开的,前端开发和Nginx、节点层是连在一起的,日常工作中用Nginx的情况挺多的。位置是申请数量最多,修改数量最多的区域。以前位置的匹配标准只是一知半解。为了更好地理解位置是如何匹配的,我特意花了一些时间查阅了一些资料,总结了这篇文章。期待对大家有所帮助。

英语语法标准

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

英语语法标准很简单,一个位置关键字,后面是可选的修饰语,后面是要匹配的字符,实际 *** 作要用花括号进行。

修饰符

  • =表示完全匹配。只有当请求的url路径与下面的字符串完全相同时,才会被命中。
  • ~说明标准是由规则定义的,区分英文大小写。
  • ~*说明标准是应用规则定义的,不区分英文大小写。
  • ~表示如果标记后的字符是最佳匹配,则选择标准,不进行事后搜索。
  • 匹配全程

    实例化请求的url。比如对%xx之类的字符进行编码和解码,去掉几个连接的/inurl,分析。,...在网址等。这一步是为了配合外功。

    表示位置有两种方式,一种是应用前缀字符,另一种是应用规律性。如果是正则的,前面加~或~*修饰符。

    实际匹配过程如下:

    首先检查前缀字符定义的位置,选择最匹配的项目并记下它们。

    如果找到精确匹配的位置,即应用了=修饰符的位置,则在搜索后应用其设备。

    然后,按顺序搜索由规则定义的位置,如果匹配,则终止搜索,并应用由其定义的设备。

    如果没有匹配的常规位置,则应用前一记录中记录的最匹配的前缀字符位置。

    根据上面的整个匹配过程,我们可以得到以下两点启示:

  • 将定期定义的位置应用到它在环境变量中出现的顺序是非常重要的。当搜索到第一个匹配规则时,搜索终止,后面定义的规则是没有再次匹配的机会。
  • 应用精确匹配可以提高搜索速度。比如经常索取/获取,可以用=来定义位置。
  • 举例
    接下来,我们用一个例子展示一下匹配的全过程。

    如果您有以下环境变量:

    location=/{ [configurationA] } location/{ [configurationB] } location/user/{ [configurationC] } location^~/images/{ [configurationD] } location~*\.(gif|jpg|jpeg)${ [configurationE] }

    请求/精确匹配A,不再往下看。

    Request/index.html匹配B.首先找到匹配的前缀字符,找到与B匹配最多的,然后按顺序找到匹配的规律性。结果没有搜索到,所以应用之前识别出的匹配最多的,也就是配备了b。

    Request/user/index.html匹配C.先找最匹配的C,因为后面没有匹配的规律性,所以应用最匹配的C。

    Request/user/1.jpg匹配e.首先搜索前缀字符找到最匹配的项C,然后进行常规搜索找到匹配项e,因此,应用e。

    Request/images/1.jpg匹配d.首先搜索前缀字符,找到最匹配的d.但是,独特的是,它应用了~修饰符,所以不进行后面的常规匹配搜索,所以应用d.这里,没有前面的修饰符,最后匹配的其实是e.大家可以想一想为什么。

    请求/documents/about.html匹配B.因为B表示所有以/开头的URL都匹配。以上装备中,只能考虑B,所以匹配B。

    location@name的用法

    @用于定义名称位置。关键是内部跳转,不是解决所有正常请求。其使用方法如下:

    location/{ try_files$uri$uri/@custom } location@custom{ #...dosomething }

    在上面的例子中,当你试图浏览url并且找不到匹配的文档时,你跳转到你自己的名字位置(这里是custom)。

    特别是,您不能在命名位置中嵌入其他命名位置。

    您是否希望/位于URL的末尾

    关于/在URL的结尾有三点也必须说清楚。第一点和定位设备有关,另外两点无关。

    外景地的人物有价值/无害。换句话说,/user/和/user是一样的。

    如果URL是以https://domain.com/,的方式构建的,那么如果末尾有什么内容,就不容易跳转。因为计算机浏览器发出请求,所以默认设置添加了/。虽然许多计算机浏览器不在地址栏显示信息。对此,可以浏览百度进行认证。

    假设URL被构造成一个https://domain.com/some-dir/.,如果尾端缺失/将导致跳转。按照承诺,URL末尾的/表示文件目录,没有/表示文档。因此,在浏览/some-dir/时,网络服务器会自动转到文件目录,找到匹配的默认设置文档。如果您浏览/some-dir,网络服务器将首先查找some-dir文件。如果找不到,它会以some-dir作为文件目录,跳转到/some-dir/,在这个文件目录中寻找默认设置文档。来测试你的网站是不是那样的。

    摘要

    位置配备有两种方式,前缀字符和规律性。在匹配的情况下,先找前缀字符,挑匹配最多的,再找规律性。常规字符优先于前缀字符。

    根据环境变量中的顺序执行常规搜索。所以规律的顺序很重要,建议越详细,就越高。

    Application=精确匹配可以加快搜索顺序。如果经常浏览根网站域名,建议申请=。

    文章里的内容就这些了。期待对大家的学习和培训有所帮助,也期待大家的应用。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/774640.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存