Selection

Selection is the mechanism for conditional operation. This is done by specifying the extraction of a feature then applying comparisons. Each cmparison has an associated list of directives which is invoked if the comparison is successful. The with directive is used for selection. The key select is used to anchor the list of comparisons.

with: ua-req-host
select:
-  match: "mail.example.one"
   do:
   -  proxy-req-url: "https://example.com/mail"
-  match: "search.example.one"
   do:
   -  proxy-req-url: "https://engine.example.one"

Here ua-req-host is an extractor that extracts the host of the URL in the client request. The value of the select key is a list of objects which consist of a comparison and a list of directives as the value of the do key.

The comparison match is a comparison operator that does string comparisons between its value and the active feature. The directive proxy-req-url sets upstream destination in the proxy request. What this configuration snippet does is change requests for "mail.example.one" to requests to "example com/mail" and requests for "search.example.on" to "engine.example.one".

The with / select mechanism is a directive and so selection can be nested to an arbitrary depth. Each selection can be on a different feature. As result the relative importance of features is determined by the particular configuration. This means decisions can be made in a hierarchial style rather than a single linear set of rules, which enables a large reduction in "cross talk" between rules.