2020-05-14 16:53:28 -05:00
|
|
|
:80 {
|
|
|
|
@matcher {
|
|
|
|
method GET
|
|
|
|
}
|
|
|
|
respond @matcher "get"
|
|
|
|
|
|
|
|
@matcher2 method POST
|
|
|
|
respond @matcher2 "post"
|
|
|
|
|
|
|
|
@matcher3 not method PUT
|
|
|
|
respond @matcher3 "not put"
|
2020-09-25 18:50:26 -05:00
|
|
|
|
|
|
|
@matcher4 vars "{http.request.uri}" "/vars-matcher"
|
|
|
|
respond @matcher4 "from vars matcher"
|
|
|
|
|
|
|
|
@matcher5 vars_regexp static "{http.request.uri}" `\.([a-f0-9]{6})\.(css|js)$`
|
|
|
|
respond @matcher5 "from vars_regexp matcher with name"
|
|
|
|
|
|
|
|
@matcher6 vars_regexp "{http.request.uri}" `\.([a-f0-9]{6})\.(css|js)$`
|
|
|
|
respond @matcher6 "from vars_regexp matcher without name"
|
2020-10-31 11:27:01 -05:00
|
|
|
|
2022-09-01 22:12:37 -05:00
|
|
|
@matcher7 `path('/foo*') && method('GET')`
|
|
|
|
respond @matcher7 "inline expression matcher shortcut"
|
|
|
|
|
|
|
|
@matcher8 {
|
2020-10-31 11:27:01 -05:00
|
|
|
header Foo bar
|
|
|
|
header Foo foobar
|
|
|
|
header Bar foo
|
|
|
|
}
|
2022-09-01 22:12:37 -05:00
|
|
|
respond @matcher8 "header matcher merging values of the same field"
|
2020-11-02 18:05:01 -05:00
|
|
|
|
2022-09-01 22:12:37 -05:00
|
|
|
@matcher9 {
|
2020-11-02 18:05:01 -05:00
|
|
|
query foo=bar foo=baz bar=foo
|
|
|
|
query bar=baz
|
|
|
|
}
|
2022-09-01 22:12:37 -05:00
|
|
|
respond @matcher9 "query matcher merging pairs with the same keys"
|
2020-12-09 13:28:14 -05:00
|
|
|
|
2022-09-01 22:12:37 -05:00
|
|
|
@matcher10 {
|
2020-12-09 13:28:14 -05:00
|
|
|
header !Foo
|
|
|
|
header Bar foo
|
|
|
|
}
|
2022-09-01 22:12:37 -05:00
|
|
|
respond @matcher10 "header matcher with null field matcher"
|
2022-05-04 13:42:37 -05:00
|
|
|
|
2022-09-01 22:12:37 -05:00
|
|
|
@matcher11 remote_ip private_ranges
|
|
|
|
respond @matcher11 "remote_ip matcher with private ranges"
|
2020-05-14 16:53:28 -05:00
|
|
|
}
|
|
|
|
----------
|
|
|
|
{
|
|
|
|
"apps": {
|
|
|
|
"http": {
|
|
|
|
"servers": {
|
|
|
|
"srv0": {
|
|
|
|
"listen": [
|
|
|
|
":80"
|
|
|
|
],
|
|
|
|
"routes": [
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"method": [
|
|
|
|
"GET"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "get",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"method": [
|
|
|
|
"POST"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "post",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"not": [
|
|
|
|
{
|
|
|
|
"method": [
|
|
|
|
"PUT"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "not put",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
2020-09-25 18:50:26 -05:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"vars": {
|
2021-12-13 15:59:58 -05:00
|
|
|
"{http.request.uri}": [
|
|
|
|
"/vars-matcher"
|
|
|
|
]
|
2020-09-25 18:50:26 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "from vars matcher",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"vars_regexp": {
|
|
|
|
"{http.request.uri}": {
|
|
|
|
"name": "static",
|
|
|
|
"pattern": "\\.([a-f0-9]{6})\\.(css|js)$"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "from vars_regexp matcher with name",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"vars_regexp": {
|
|
|
|
"{http.request.uri}": {
|
|
|
|
"pattern": "\\.([a-f0-9]{6})\\.(css|js)$"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "from vars_regexp matcher without name",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
2020-10-31 11:27:01 -05:00
|
|
|
},
|
2022-09-01 22:12:37 -05:00
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"expression": "path('/foo*') \u0026\u0026 method('GET')"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "inline expression matcher shortcut",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2020-10-31 11:27:01 -05:00
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"header": {
|
|
|
|
"Bar": [
|
|
|
|
"foo"
|
|
|
|
],
|
|
|
|
"Foo": [
|
|
|
|
"bar",
|
|
|
|
"foobar"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "header matcher merging values of the same field",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
2020-11-02 18:05:01 -05:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"query": {
|
|
|
|
"bar": [
|
|
|
|
"foo",
|
|
|
|
"baz"
|
|
|
|
],
|
|
|
|
"foo": [
|
|
|
|
"bar",
|
|
|
|
"baz"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "query matcher merging pairs with the same keys",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
2020-12-09 13:28:14 -05:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"header": {
|
|
|
|
"Bar": [
|
|
|
|
"foo"
|
|
|
|
],
|
|
|
|
"Foo": null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "header matcher with null field matcher",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
2022-05-04 13:42:37 -05:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"match": [
|
|
|
|
{
|
|
|
|
"remote_ip": {
|
|
|
|
"ranges": [
|
|
|
|
"192.168.0.0/16",
|
|
|
|
"172.16.0.0/12",
|
|
|
|
"10.0.0.0/8",
|
|
|
|
"127.0.0.1/8",
|
|
|
|
"fd00::/8",
|
|
|
|
"::1"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"handle": [
|
|
|
|
{
|
|
|
|
"body": "remote_ip matcher with private ranges",
|
|
|
|
"handler": "static_response"
|
|
|
|
}
|
|
|
|
]
|
2020-05-14 16:53:28 -05:00
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|