选择器和规则是soul网关中最灵魂的东西。掌握好它,你可以对任何流量进行管理。
本篇主要详解soul网关中,选择器与规则的概念,以及如何使用。
一个插件有多个选择器,一个选择器对应多种规则。选择器相当于是对流量的第一次筛选,规则就是最终的筛选。
我们想象一下,在一个插件里面,我们是不是希望根据我们的配置,达到满足条件的流量,我们插件才去执行它?
选择器和规则就是为了让流量在满足特定的条件下,才去执行我们想要的,这个你首先头脑要点数。
数据结构可以参考之前的 数据库设计
选择器详解:
上述图片中表示:当请求的uri
前缀是 /test
,并且header
头上 module
字段值为test
的时候,会转发到 1.1.1.1:8080
这个服务。
选择器建议:可以uri
条件, match
前缀 (/contextPath),进行第一道流量筛选。
当流量经过选择器匹配成功之后,会进入规则来进行最终的流量匹配。
规则是对流量最终执行逻辑的确认。
规则详解:
上图表示:当 uri
等于 /http/order/save
的时候该规则被匹配,就会执行该规则中,负载策略是 random
。
联合选择器,我们来表述一下:当一个 请求的 uri
为 /http/order/save
,会通过 random
的方式,转发到 1.1.1.1:8080
。
规则建议:可以uri
条件, match
最真实的uri路径
,进行流量的最终筛选 。
uri 匹配 (推荐)
uri匹配是根据你请求路径中的uri来进行匹配,在接入网关的时候,前端几乎不用做任何更改。
当使用 match
方式匹配时候,同 springmvc
模糊匹配原理相同。
在选择器中,推荐使用uri中的前缀来进行匹配,而在规则中,则使用具体路径来进行匹配。
该匹配方式的时候,在匹配字段名称可以任意填写,匹配字段值需要正确填写。
header 匹配
http
请求头中的字段值来匹配。query 匹配
这个是根据你的uri中的查询参数来进行匹配,比如 /test?a=1&&b=2 ,那么可以选择该匹配方式。
上述就可以新增一个条件,选取 query方式 , a = 1 。
ip匹配
这个是根据 http调用方的 ip来进行匹配。
尤其是在waf插件里面,如果发现一个ip地址有攻击,可以新增一条匹配条件,填上该ip,拒绝该ip的访问。
如果在soul前面使用了nginx代理,为了获取正确的ip,你可能要参考 dev-iphost
host匹配
这个是根据 http调用方的host来进行匹配。
尤其是在waf插件里面,如果发现一个host地址有攻击,可以新增一条匹配条件,填上该host,拒绝该host的访问。
如果在soul前面使用了nginx代理,为了获取正确的host,你可能要参考 dev-iphost
post匹配