`

nginx location配置的优先级

阅读更多

      

location正则写法

location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
  [ configuration A ]
}
location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
  # 但是正则和最长字符串会优先匹配
  [ configuration B ]
}
location /documents/ {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration C ]
}
location ~ /documents/Abc {
  # 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration CC ]
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
  [ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配所有以 gif,jpg或jpeg 结尾的请求
  # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
  [ configuration E ]
}
location /images/ {
  # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
  [ configuration F ]
}
location /images/abc {
  # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
  # F与G的放置顺序是没有关系的
  [ configuration G ]
}
location ~ /images/abc/ {
  # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
    [ configuration H ]
}
location ~* /js/.*/\.js
  • 开头表示精确匹配
  • 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
  • ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
  • ~ 开头表示区分大小写的正则匹配;
  • ~* 开头表示不区分大小写的正则匹配
  • / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

顺序优先级

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) >(location 部分起始路径) > (/)

上面的匹配结果,按照上面的location写法,以下的匹配示例成立
/ -> config A 精确完全匹配,即使/index.html也匹配不了
/downloads/download.html -> config B
匹配B以后,往下没有任何匹配,采用B
/images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下
/images/abc/def -> config D
最长匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到 的,这里只是为了说明匹配顺序
/documents/document.html -> config C
匹配到C,往下没有任何匹配,采用C
/documents/1.jpg -> configuration E
匹配到C,往下正则匹配到E
/documents/Abc.jpg -> config CC
最长匹配到C,往下正则顺序匹配到CC,不会往下到E

实际使用建议

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    proxy_pass http://tomcat:8080/
}

附上两个地址:
http://tengine.taobao.org/book/chapter_02.html
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

分享到:
评论

相关推荐

    NGINX location 在配置中的优先级.docx

    NGINX location 配置中的优先级详解 NGINX 中的 location directive 是一个非常重要的配置指令,它可以根据不同的 URL 模式来匹配不同的请求路径。但是,location 的配置顺序并不是固定的,而是根据 Location ...

    nginx location配置详细解释.pdf

    ### Nginx Location配置详细解析 #### 一、引言 Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 Linux 环境下有着非常好的性能表现。在 Nginx 的配置文件中,`location` ...

    Nginx配置之location的匹配优先级浅析

    理解`location`的匹配优先级对于编写高效的Nginx配置至关重要,有助于确保请求被正确路由,并减少不必要的性能开销。在编写配置时,应结合业务需求和性能考虑,精心设计每个`location`指令,以实现最佳的请求处理...

    nginx location优先级的深入讲解

    Nginx的location优先级规则虽然比较复杂,但仔细研究后能够帮助我们更有效地控制Web服务器的请求处理行为。在实际部署中,合理地利用这些优先级规则,可以让Web服务具有更好的性能和更细致的流量控制能力。

    nginx location匹配实例详解

    您可能感兴趣的文章:Nginx配置指令location匹配符优先级和安全问题详解Nginx location 匹配规则Nginx服务器的location指令匹配规则详解利用nginx如何匹配多个条件Nginx location匹配规则的方法示例简介Nginx中的...

    nginx搭建配置详细说明

    3.4. nginx重要指令之location 4. nginx中的rewrite 4.1. 什么是rewrite 4.2. rewrite的命令的作用域和优先级 4.3. if指令 4.3.1. if指令的语法 4.3.2. if指令中使用的逻辑运算符 4.3.3. If指令中可以使用的...

    Nginx配置指令location匹配符优先级和安全问题

    在配置Nginx时,`location`指令是核心部分,用于处理不同URI的请求。理解`location`匹配符的优先级和正确配置对于优化服务器性能和确保安全性至关重要。 **一、location匹配符** 1. **等于匹配符:=`** - 精确...

    Nginx+keepalived核心配置文件

    其中,你可以配置优先级(priority)、虚拟IP(virtual_ipaddress)、健康检查(track_script)等。 3. **smtp_server**: 配置SMTP服务器,用于发送故障通知邮件。 4. **smtp_conn**: SMTP连接参数,如端口、用户名...

    Nginx关于location的匹配规则详解.docx

    **Nginx中的Location匹配规则详解** ...理解并熟练掌握Nginx的`location`匹配规则对于优化服务器配置、提升网站性能至关重要。在实际应用中,应结合具体需求灵活运用各种匹配方式和标志,以实现高效、精准的请求处理。

    nginx配置+https

    #### 一、Nginx 简介及配置结构 Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。它以其稳定性、丰富的功能集、简单的配置文件和较低的内存消耗而闻名。 在配置文件中,`...

    详解Nginx之Location配置(Location匹配顺序)

    在Nginx配置中,`location`指令是核心部分,用于根据URI(统一资源标识符)来决定如何处理请求。本篇文章将深入探讨`location`配置的匹配顺序及其在实际应用中的作用。 ### 1. `location`的基础语法 `location`...

    nginx location中多个if里面proxy_pass的方法

    在Nginx配置中,`location`指令是用于定义URL路由和处理规则的关键部分,它决定了请求应如何被代理、重定向或静态文件服务。在本文中,我们将深入探讨`location`指令的匹配机制以及在多个`if`语句中使用`proxy_pass`...

    Nginx Location 指令简明指南

    Nginx的配置文件中包含多个指令,其中Location指令是用于处理特定URI请求的关键部分。本文将详细介绍Nginx Location指令的基本语法、匹配过程、配置实例以及Nginx中的全局变量。 首先,Location指令的基本语法非常...

    Nginx服务器中location配置的一些基本要点解析

    `main`级别的配置适用于整个Nginx实例,`server`级别的配置应用于特定的虚拟主机(即监听相同端口的多个服务器块),而`location`级别的配置则针对特定的URL路径。需要注意的是,这三层并不是嵌套关系,而是独立存在...

    高性能Web服务器Nginx的配置与部署.pdf

    本文件主要介绍了Nginx的配置与部署,特别是Rewrite规则的设置以及Nginx的基本操作命令。 1. **Nginx Rewrite规则**: Nginx的Rewrite模块允许我们进行URL重写,实现URL路径的转换。例如,通过在`server`块中添加...

    Nginx location匹配规则的方法示例

    在Nginx的配置中,location块是用来根据用户请求的URI来定位到具体的处理方式,即它用来定义请求的路由规则。Nginx的location匹配规则非常灵活和强大,可以实现精确匹配、前缀匹配、正则表达式匹配等多种方式。在...

    详解Nginx location 匹配规则

    在Web服务器配置中,location指令用于控制不同URL请求的访问规则,是Nginx配置中非常核心的部分。接下来,我们将详细探讨Nginx location指令的匹配规则,以及如何正确地配置它们来处理各种HTTP请求。 首先,...

Global site tag (gtag.js) - Google Analytics