Selector Detailed Explanation
Features
-
Selector and rule are the key point of soul gateway, you can manage any request with it.
-
This chapter is mainly focus on the concepts of selector and rule and how to use it.
Overview
- One plugin has many selector and a selector has many rules, selector is the first filter of request, and the rule is the final filter.
- Please consider this, it would be perfect when the plugin executes the request until it reached the config value.
- Selector and rule are designed to execute only when the request meet the specific condition.
- Please refer to the previous data structure database design.
Selector

-
selector detailed explanation:
- name:create your selector with a distinguish name.
- type:custom flow is customized request, full flow is full request. customized request will be handled by the conditions as below, while full request won't.
- match method: you can combine these conditions with 'and' , 'or' operators.
- condition:
- uri: filter request with uri method and support fuzzy matching (/**).
- header: filter request with request header.
- query: filter request with query string.
- ip: filter request with your real ip.
- host: filter request with your real host.
- post: not recommend to use.
- condition match:
- match : fuzzy string matching,recommend to combine with uri,support restful matching.(/test/**).
- = : if the values are the same, then they match.
- regEx : regex matching,match characters in regex expression.
- like : string fuzzy matching.
- open option:only work with enabled.
- print log:it will print the matching log with the open option enabled.
- execution order:the smaller will have high priorty to execute among multi-selectors.
-
the above picture means: when the prefix of the request uri is
/testand the value ofmoduleinheaderistest, it will redirect to this service1.1.1.1:8080. -
selector advice : combine
uriconditon andmatchprefix(/contextPath)as the first request filter.
Rule

-
when the request was passed by the seletor, then it will be processed by the rule, the final filter.
-
rule is the final confirmation about how to execute request logically.
-
rule detailed explanation:
- name:create your rule with a distinguish name.
- match method: you can combine these conditions with 'and' , 'or' operators.
- condition:
- uri: filter request with uri method and support fuzzy matching (/**).
- header: filter request with request header.
- query: filter request with query string.
- ip: filter request with your real ip.
- host: filter request with your real host.
- post: not recommend to use.
- condition match:
- match : fuzzy string matching,recommend to combine with uri,support restful matching.(/test/**)
- = : if the values are the same, then they match.
- regEx : regex matching,match characters in regex expression.
- like : string fuzzy matching.
- open option:only work with enabled.
- print log:it will print the matching log with the open option enabled.
- execution order:the smaller will have high priorty to execute among multi-rules.
- handle: different plugin has different execution method, pls refer to the specific one.
-
above picture means: when the request
uriequals to/http/order/save, it will execute based on this rule,load strategy israndom. -
combine selector means :when the request
uriis/http/order/save, it will be redicted to1.1.1.1:8080byrandommethod. -
rule advice: combine
uricondition withmatchthe realuri pathcondition as the final filter.
Condition Explanation
-
uri matching (recommend)
-
uri matching is based on your request uri, the frontend won't change anything before accessing the gateway.
-
the
matchfilter method is the same withspringmvcfuzzy matching. -
in selector,we recommend to match with the prefix of uri, and use the specific path in rule.
-
when changing the match method, the matching field name can be filled randomly, but make sure the match value must be correct.
-
-
header matching
- header matches with your
httprequest header value.
- header matches with your
-
query matching
-
it matches the query string in your uri, such as: /test?a=1&&b=2.
-
so you can add a new condition, choose query method: a = 1.
-
-
ip matching
-
it matches the ip of the http caller.
-
especially in the waf plugin, if you find some ip is unsafe, you can add a match condition with this ip, then it can't access any more.
-
if you use nginx proxy before soul, you can get the right ip with refering to parsing-ip-and-host
-
-
host matching
-
it matches the host of http caller.
-
especially in waf plugin, if you find some host is unsafe, you can add a match condition with this host, then it can't access any more.
-
if you use nginx proxy before soul, you can get the right ip with refering to parsing-ip-and-host
-
-
post matching
- not recommend to use.