`
zachary.guo
  • 浏览: 482883 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Nginx 的 location 指令的匹配规则

阅读更多
        Nginx 的 location 指令,允许对不同的 URI 进行不同的配置,既可以是字符串,也可以是正则表达式。使用正则表达式,须使用以下前缀:
        (1) ~*, 表示不区分大小写的匹配。
        (2) ~, 表示区分大小写的匹配。

        对于非正则的匹配,即字符串匹配,有如下前缀:
        (1) ^~, 表示匹配到字符串后,终止正则匹配。
        (2) =, 表示精确匹配。
        (3) @, 当然,这个也算不上字符串匹配。如果可以,你也可以将其理解成是正则匹配。它是一个命名标记,这种 location 不会用于正常的请求,它们通常只用于处理内部的重定向。

        在匹配过程中,Nginx 将首先匹配字符串,然后匹配正则表达式。匹配到第一个正则表达式后,会停止搜索。如果匹配到正则表达式,则使用正则表达式的搜索结果,如果没有匹配到正则表达式,则使用字符串的搜索结果。

        上面这段话的意思是说,有一个字符串和正则表达式均能匹配上,那么会使用正则表达式的搜索结果。这里,我们可以使用前缀 "^~" 来禁止匹配到字符串后,继续检查正则表达式。匹配到 URI 后,将停止搜索。

        使用前缀 "=" 可以进行精确的 URI 匹配,如果找到匹配的 URI,则停止搜索。"location = /" 只能匹配到 "/",而 "/test.html" 则不能被匹配。

        正则表达式的匹配,按照它们在配置文件中的顺序进行,写在前面的优先。

        另外,前缀 "@" 是一个命名标记,这种 location 不会用于正常的请求,它们通常只用于处理内部的重定向(例如:error_page, try_files)。

        最后总结一下匹配的过程:
        (1) 前缀 "=" 先进行匹配,如果找到了,终止搜索。
        (2) 对所有其它 location 进行非正则的匹配,找到最精确匹配(对于 /blog/admin/ 这个 URI, location /blog 要比 location / 长,因此 location /blog 要比 location / 要精确)的那个。如果找到的这个是带 "^~" 前缀的,则终止搜索并直接返回找到的这个,否则开始正则查找。会不会出现所有的非正则匹配都无法匹配到 URI 呢,当然,你若不定义一个 location /,这种情况的确会发生,没关系啊,它会进行正则查找的。
        (3) 正则查找,按照我们配置文件中配置的 location 顺序进行查找。
        (4) 如果正则查找匹配成功,则使用此正则匹配的 location,否则,使用第二步查找的结果。如果『否则』发生了,同时,第二步中的粗体字部分的假设的情况也发生了,怎么办?404 会等着你的。
分享到:
评论

相关推荐

    nginx location匹配实例详解

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

    Nginx服务器的location指令匹配规则详解

    Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令。Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。 nginx ...

    Nginx Location 指令简明指南

    主要介绍了Nginx Location 指令简明指南,本文讲解了它的基本语法、匹配过程、配置实例和全局变量,需要的朋友可以参考下

    Nginx Location指令URI匹配规则详解小结

    location指令是http模块当中最核心的一项配置,根据预先定义的URL匹配规则来接收用户发送的请求,根据匹配结果,将请求转发到后台服务器、非法的请求直接拒绝并返回403、404、500错误处理等。 2、location指令语法 ...

    nginx location语法使用介绍

    Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令。Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。 nginx ...

    nginx 配置location匹配规则实例讲解

    nginx的配置指令的作用域可以分为 main,server,location这3个种,实际上这3者不是依次包含的关系,而是相互独立的关系,比如一个只具有main级别作用域的指令,是不能写在某个server或者location内的,模块的某个...

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

    一、 location 的匹配符1.等于匹配符:=等于匹配符就是等号,特点可以概括为两点:精确匹配不支持正则表达式2.空匹配符空匹配符的特点是:匹配以指定模式开始的 URI不支持正则表达式3.正则匹配符:~正则匹配符是可以...

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

    1)location的匹配指令: ~ #波浪线表示执行一个正则匹配,区分大小写 ~* #表示执行一个正则匹配,不区分大小写 ^~ #^~表示普通字符匹配,不是正则匹配。如果该选项匹配,只匹配该选项,不匹配别的选项,一般...

    详解Nginx Location配置

    解决这个问题,第一的反映是直接使用 Nginx 的 location 指令来解决,不过在给出答案之前,我们先来了解一下 Nginx location 指令的基础。 Nginx 区块配置概念 在 Nginx 的配置文件中,通常会用两个常用的区块...

    nginx location中uri的截取的实现方法

    aias 指令则会截断匹配的 uri,然后使用 alias 设定的路径加上剩余的 uri 作为子路径进行查找 location 中的 proxy_pass 的 uri 如果 proxy_pass 的 url 不带 uri 如果尾部是”/”,则会截断匹配的uri 如果尾部...

    Nginx一个域名访问多个项目的方法实例

    背景介绍 最近在个人的多个项目部署中遇到这样一个问题,一个域名如何实现多个项目的访问。...2.普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)。 3.正则表达式指

    实战Nginx高性能Web服务器

    1、高性能Web服务器Nginx的配置与部署...16、高性能Web服务器Nginx的配置与部署研究(16)小议location匹配模式优先级 内容:介绍 location 区段的模式匹配的几种基本方式(匹配符),以及优先级顺序,并提供实例分析。

    深入理解Nginx中Server和Location的匹配逻辑

    Server的匹配逻辑 Nginx在决定请求由哪个server块执行时,主要关注的是server块中的listen和server_name两个字段 listen指令 listen字段定义server响应的ip和端口,如果没有明确配置listen字段,默认监听0.0.0.0:80...

    nginx proxy_pass反向代理配置中url后加不加/的区别介绍

    而在日常的web网站部署中,经常会用到nginx的proxy_pass反向代理,有一个配置需要弄清楚:配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,...

    部署Nginx+Apache动静分离的实例详解

    在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式 反向代理原理 Nginx不仅能作为Web服务器,还具有反向代理、负载均衡和缓存的功能 Nginx通过proxy模块实现将客户端的请求代理...

Global site tag (gtag.js) - Google Analytics