3. nginx location 匹配优先级问题

官方文档翻译工

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

匹配是针对标准化的URI进行的,对编码为“%XX”格式的文本进行解码,解决相对路径组件“.”和“..”的引用,并可能将两个或多个相邻斜杠压缩为单个斜杠。

位置可以通过前缀字符串或正则表达式来定义。正则表达式用前置“~ *”修饰符(用于不区分大小写的匹配)或“〜”修饰符(用于区分大小写的匹配)指定。为了找到与给定请求匹配的位置,nginx首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住具有最长匹配前缀的位置。然后按照正则表达式在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果没有找到与正则表达式匹配的结果,则使用先前记住的前缀位置的配置。
location可以嵌套,但有一些例外情况。

对于像macOS和Cygwin这样不区分大小写的操作系统,使用前缀字符串进行匹配会忽略大小写(0.7.7)。但是,比较仅限于单字节语言环境。

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

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

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

posted @   萱乐庆foreverlove  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示