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

相关文章

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器

nginx upstream六种方式分配小结

《nginxupstream六种方式分配小结》本文主要介绍了nginxupstream六种方式分配小结,包括轮询、加权轮询、IP哈希、公平轮询、URL哈希和备份服务器,具有一定的参考价格,感兴趣的可... 目录1 轮询(默认)2 weight3 ip_hash4 fair(第三方)5 url_hash(第三

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc

nginx中重定向的实现

《nginx中重定向的实现》本文主要介绍了Nginx中location匹配和rewrite重定向的规则与应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 目录一、location1、 location匹配2、 location匹配的分类2.1 精确匹配2

Nginx之upstream被动式重试机制的实现

《Nginx之upstream被动式重试机制的实现》本文主要介绍了Nginx之upstream被动式重试机制的实现,可以通过proxy_next_upstream来自定义配置,具有一定的参考价值,感兴... 目录默认错误选择定义错误指令配置proxy_next_upstreamproxy_next_upst

nginx生成自签名SSL证书配置HTTPS的实现

《nginx生成自签名SSL证书配置HTTPS的实现》本文主要介绍在Nginx中生成自签名SSL证书并配置HTTPS,包括安装Nginx、创建证书、配置证书以及测试访问,具有一定的参考价值,感兴趣的可... 目录一、安装nginx二、创建证书三、配置证书并验证四、测试一、安装nginxnginx必须有"-

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

springboot rocketmq配置生产者和消息者的步骤

《springbootrocketmq配置生产者和消息者的步骤》本文介绍了如何在SpringBoot中集成RocketMQ,包括添加依赖、配置application.yml、创建生产者和消费者,并展... 目录1. 添加依赖2. 配置application.yml3. 创建生产者4. 创建消费者5. 使用在

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基