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

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建