nginx路径匹配规则

简单理解常用的匹配方式有四种

  • (=)精确匹配
  • (^~)不在向后匹配的前缀匹配
  • ( )前缀匹配
  • (~,~*)区分大小写的正则匹配和不区分大小写的正则匹配

1.1= 等号开头的精确匹配

请求的url完全匹配该值时才生效,如有参数不影响匹配的路径

        location = /test {
            default_type  text/html;
            return 200 '这是精确匹配';
        }

        location = /test/ {
            default_type  text/html;
            return 200  '精确匹配2';
        }
匹配第一个

匹配第二个
请求参数不影响匹配路径

1.2空格开头的前缀匹配

只要url路径和前缀匹配路径一致即可匹配,url的路径可以大于等于前缀匹配的路径。

如url满足多个前缀匹配会选择匹配路径最长的那个。

        location = /test {
            default_type  text/html;
            return 200 '这是精确匹配';
        }

        location = /test/ {
            default_type  text/html;
            return 200  '精确匹配2';
        }
        location /test {
            default_type  text/html;
            return 200  '前缀匹配1';
        }
        location /test/test2 {
            default_type  text/html;
            return 200  '前缀匹配2';
        }
        location / {
            default_type  text/html;
            return 200  '前缀匹配3';
        }

可以看到/test/abc这个路径前缀满足精确匹配的前缀却不会匹配,只有完全一致才能精确匹配。匹配到了前缀匹配上

/test/test2/abc路径满足前缀匹配1和前缀匹配2,会选择匹配路径更长的前缀匹配2

/可以匹配所有没有匹配到的路径因为所有路径都是/开头的


1.3^~ 开头不在向后匹配的前缀匹配

是前缀匹配的一种,不过匹配后会停止后续的正则匹配的查找。

        location ^~ /test {
            default_type  text/html;
            return 200  '不向后的前缀匹配1';
        }
        location ^~ /test/t1 {
            default_type  text/html;
            return 200  '不向后的前缀匹配2';
        }
        location /test/t1/t2 {
            default_type  text/html;
            return 200  '前缀匹配1';
        }
        location  / {
            default_type  text/html;
            return 200  '前缀匹配3';
        }

        location  ~* bb$ {
            default_type  text/html;
            return 200  '正则匹配1';
        }

/test/t1满足不向后前缀匹配1,和不向后的前缀匹配2。会选择更长的不向后的前缀匹配2

不向后的前缀匹配也是一种前缀匹配/test/t1/t2路径会匹配最长的前缀匹配1

有bb结尾的正则匹配,/test/t1/t2/testbb路径匹配前缀匹配后继续向下匹配到正则匹配1

 /test/t1/testbb路径匹配不向后的前缀匹配2跳过了bb结尾正则匹配


1.4~或~*开头的正则匹配

~区分大小写~*不区分大小写多用于对复杂的url匹配

        location /test/t1/t2 {
            default_type  text/html;
            return 200  '前缀匹配1';
        }
        location  / {
            default_type  text/html;
            return 200  '前缀匹配3';
        }

        location  ~* bb$ {
            default_type  text/html;
            return 200  '正则匹配1';
        }

        location ~ ^/images/.*\.(hh|gg)$ {
            default_type  text/html;
            return 200  '正则匹配/images/路径下所有.hh.gg结尾的';
        }

/test/t1/t2/aa满足前缀匹配

/test/t1/t2/aaBB满足前缀匹配后继续判断是否满足正则匹配,满足则用正则匹配

总结

匹配的优先顺序

  1. 先匹配精确匹配,如果匹配到直接使用。
  2. 匹配前缀匹配,若能匹配多个前缀匹配选最长匹配的
  3. 前缀匹配后若还有正则匹配则在看是否有可匹配的正则匹配,若有使用正则匹配
  4. 如果是不继续向后匹配的正则匹配,则不向后匹配正则匹配
  5. 都没匹配看是否有正则匹配可以匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值