nginx location配置小结

2024-08-22 18:08
文章标签 配置 nginx 小结 location

本文主要是介绍nginx location配置小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

location 语法:location [=|\~|\~*|^~|@] /uri/ { … }
默认:否
上下文:server
这个指令随URL不同而接受不同的结构,既可以配置常规字符串也可以使用正则表达式。如果使用正则表达式,必须使用\~*或者是\~作为前缀,两者的区别是\~*不区分大小写,~是区分大小写的。

那么多的location,判定的顺序是什么呢?

  1. 先匹配普通的location,然后再匹配正则表达式。
  2. 普通的location之间,匹配最大前缀。因为location不是“严格匹配”而是“前缀匹配”,就会产生一个HTTP请求可以“前缀匹配”到多个location,举例来说:如果HTTP请求/prefix/mid/t.html,location /prefix/mid/ {} 和location /prefix/ {}都满足匹配要求,选哪个呢?使用最大前缀匹配,使用location /prefix/mid/ {}。
  3. 正则location匹配的时候,按照配置文件的先后顺序进行匹配,并且只要匹配到一条正则location就不考虑后面的。
  4. 匹配完了普通的location之后,会形成一个临时结果,然后继续正则匹配,,如果有匹配上的,就会“覆盖”之前临时的结果;正则location里如果没有匹配的上的,就使用最大前缀匹配的结果。
  5. 通常的规则是匹配完了普通location之后,再去匹配正则location,能不能直接匹配完了普通location之后,不再匹配正则location了?可以使用“\^\~”或者“=”实现,^表示非,\~表示正则,使用“\^\~”作为前缀的意思就是不用继续匹配正则,并且“\^\~”依然遵守最大前缀匹配规则;“=”则是必须严格匹配。
  6. 前面说到可以使用“\^\~”或者“=”阻止正则location的搜索,其实还有一种“隐含”的方式,那就是location的配置精确到直接匹配,比如说当前的配置为location /exact/match/test.html {配置指令块1},那么当我们请求GET /exact/match/test.html,就会匹配到指令块1,不再继续搜索!(还未验证!)

顺便说一下“location / {}”和“location = / {}”的区别,“location / {}”遵守普通location最大前缀匹配,因为任何URI都必然以“/”根开头,所以能匹配任何URI,如果有更具体的location就选具体的,如果没有,“location / {}”也能起到一个保底的作用;“location = / {}”遵守的是严格精确匹配,也就是智能匹配http://host:port/请求,同时会禁止继续搜索正则location。如果我们只想对“GET /”请求配置作用指令,那么我们可以使用“location = / {}”减少正则location的搜索,提高效率。

To summarize, the order in which directives are checked is as follows:

  1. Directives with the “=” prefix that match the query exactly. If found, searching stops.
  2. All remaining directives with conventional strings. If this match used the “^~” prefix, searching stops.
  3. Regular expressions, in the order they are defined in the configuration file.
  4. If #3 yielded a match, that result is used. Otherwise, the match from #2 is used.

翻译过来就是:
1. = 前缀的指令严格匹配这个查询。如果找到,停止搜索;
2. 剩下的常规字符串,长的在前。如果这个匹配使用 ^~ 前缀,搜索停止;
3. 正则表达式,按配置文件里的顺序;
4. 如果第三步产生匹配,则使用这个结果。否则使用第二步的匹配结果。

配置举例:

location = / {
# 只匹配/查询。
[ configuration A ]
}
location / {
# 匹配任何查询,因为所有请求都以/开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。然而所有 /images/ 目录的请求将使用 Configuration C。
[ configuration D ]
}

请求举例:

/ -> configuration A
/documents/document.html -> configuration B
/images/1.gif -> configuration C
/documents/1.jpg -> configuration D

注意:按任意顺序定义这4个配置结果将仍然一样

参考资料: 关于一些对location认识的误区
官方文档解释:http://wiki.nginx.org/NginxHttpCoreModule#location

这篇关于nginx location配置小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097004

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

maven私服配置全过程

《maven私服配置全过程》:本文主要介绍maven私服配置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用Nexus作为 公司maven私服maven 私服setttings配置maven项目 pom配置测试效果总结使用Nexus作为 公司maven私

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa