添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
飘逸的作业本  ·  mysql datetime ...·  11 月前    · 
一身肌肉的茄子  ·  Mokito "has ...·  2 年前    · 

Nginx 中, location 块用于处理不同的请求。当一个请求到来时,Nginx 会根据 location 块中的匹配规则选择一个合适的 location 块来处理请求。以下是 Nginx 匹配顺序和优先级的详细说明及示例:

1. 精确匹配(Exact match):

使用 = 修饰符表示精确匹配。精确匹配具有最高优先级。如果一个请求与精确匹配的 location 块完全相同,Nginx 会立即使用这个 location 块处理请求,不再进行后续匹配。

location = /cccitu{

此 location 仅匹配 URI 为 /cccitu 的请求。请求 URL: https://example.com/cccitu ,匹配该 location。

正则表达式匹配(Regex match):

使用 ~ (区分大小写)或 ~* (不区分大小写)修饰符表示正则表达式匹配,正则表达式匹配的优先级高于前缀匹配。

Nginx 会按照配置文件中的顺序进行正则匹配,一旦找到一个匹配的正则表达式,就会使用该 location 块处理请求,不再进行后续匹配。

location ~* \.(jpg|jpeg|png|gif)$ {

此 locatio n会匹配所有以 .jpg .jpeg .png .gif 结尾的请求,不区分大小写。请求 URL: https://example.com/images/test.JPG ,匹配该 location。

前缀匹配(Prefix match):

前缀匹配是默认的匹配方式。Nginx 会选择最长的匹配前缀作为优先级。如果有多个前缀匹配的 location 块,最长的前缀匹配将被选中。

location /cccitu {

此 location 会匹配以 /cccitu 开头的所有请求。请求 URL: https://example.com/cccitu/some-page ,匹配该 location。

优先级匹配顺序示例:

location = / { # 精确匹配,最高优先级 location /api/ { # 前缀匹配,较长前缀 location / { # 前缀匹配,较短前缀 location ~ ^/api/.+\.php$ { # 正则表达式匹配,区分大小写,按配置顺序 location ~* \.(jpg|jpeg|png|gif)$ { # 正则表达式匹配,不区分大小写,按配置顺序

根据上述配置,以下是各种请求URL的匹配结果:

  • ⭕请求URL:https://www.cccitu.com/,精确匹配的 location 块 location = / 将被选中,因为精确匹配具有最高优先级。
  • ⭕请求URL:https://example.com/api/test,最长前缀匹配的 location 块 location /api/ 将被选中,因为它比 location / 具有更长的匹配前缀。
  • ⭕请求URL:https://example.com/api/test.php,正则表达式匹配的 location 块 location ~ ^/api/.+\.php$ 将被选中,因为它在配置文件中的顺序优先于 location ~* \.(jpg|jpeg|png|gif)$
  • ⭕请求URL:https://example.com/images/test.jpg,正则表达式匹配的 location 块 location ~* \.(jpg|jpeg|png|gif)$ 将被选中,因为它匹配了文件扩展名,且不区分大小写。
  • 综上所述,Nginx 的 location 匹配顺序和优先级如下:

    • ⭕精确匹配(Exact match): =
    • ⭕正则表达式匹配(Regex match): ~ (区分大小写)和 ~* (不区分大小写),按照配置文件中的顺序进行匹配。
    • ⭕最长前缀匹配(Longest prefix match)
    • 在编写 Nginx 配置文件时,关键在于了解 location 块的匹配顺序和优先级,以确保请求被正确地路由到合适的 location 块。在处理可能存在冲突的规则时,要确保优先级较高的规则放在前面,以便它们能够正确地覆盖和执行。

      例如,在处理 PHP 脚本的执行与特定目录下的文件访问限制时,应将访问限制的 location 块放在 PHP 执行规则之前,以确保访问限制能够正确地生效。