location匹配规则

Nginx的location块用于配置服务器如何根据请求的URI处理请求。它支持前缀字符串和正则表达式的匹配,优先选择最长的前缀匹配,然后检查正则表达式。使用^~修饰符会阻止检查正则,而=用于精确匹配。location块可以嵌套,但某些情况下不适用,如命名位置(@)用于请求重定向,不参与常规匹配。
摘要由CSDN通过智能技术生成

Syntax: location [ = | ~ | ~* | ^~ ] uri { … }
      location @name { … }
Default: —
Context: server, location

location块根据请求的URI配置Nginx服务器的行为。

在对进行URI匹配前,先将URI进行标准化处理, 包括解码“%XX”形式的文本、解析相对路径组件“.”和“..”,以及将两个或多个相邻的斜杠压缩为一个斜杠。然后再对标准化后的URI进行匹配。

一个location可以通过前缀字符串或正则表达式来定义。如果要使用正则表达式,需要使用 [ ~* ] 或 [ ~ ] 修饰符来指定大小写敏感或不敏感匹配。当Nginx接收到一个请求时,它会首先检查所有前缀字符串匹配的location,选择最长匹配的前缀,并记住它。然后按照它们在配置文件中出现的顺序检查所有正则表达式,直到找到第一个匹配的表达式为止。如果没有找到匹配的正则表达式,则使用之前记住的前缀location的配置。

location 块可以嵌套,但有一些例外情况。

对于macOS和Cygwin等不区分大小写的操作系统,与前缀字符串匹配会忽略大小写(0.7.7)。然而,但比较受到一字节本地化的限制。

正则表达式可以包含捕获(0.7.40) ,以后可以在其他指令中使用。

如果最长的匹配前缀位置具有“ ^~”修饰符,则不检查正则表达式。

此外,使用“=”修饰符可以定义URI和位置的精确匹配。如果找到精确匹配,则搜索终止。例如,如果“/”请求经常发生,定义“location = /”将加快处理这些请求的速度,因为搜索会在第一次比较后立即终止。这样的位置显然不能包含嵌套 location。

在0.7.1到0.8.41的版本中,如果一个请求匹配了不带“=”和“^~”修饰符的前缀位置,搜索也会终止,正则表达式也不会被检查。

让我们通过一个例子来说明以上内容:

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}
  • “/”请求将匹配配置A
  • “/index.html”请求将匹配配置B
  • “/documents/document.html”请求将匹配配置C
  • “/images/1.gif”请求将匹配配置D
  • “/documents/1.jpg”请求将匹配配置E

“@”前缀定义了一个命名位置。这样的位置不用于常规请求处理,而是用于请求重定向。它们不能嵌套,也不能包含嵌套位置。

如果一个 location 是由以 “/” 字符结尾的前缀字符串定义的,并且请求由以下之一的处理:proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass,或grpc_pass,则将执行特殊处理。对于URI等于此字符串但没有尾部斜杠的请求,将返回301代码的永久重定向,重定向的地址就是原URI再加一个斜杠。 如果不需要这样做,则可以像这样定义URI和位置的确切匹配:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

一个location匹配可视化网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值