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配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr