mirror of
https://github.com/caddyserver/website.git
synced 2025-05-06 11:47:12 -04:00
docs: Clarify behaviour of multiple matchers of the same type
This commit is contained in:
parent
44c7994cb1
commit
4c5f1d517c
1 changed files with 29 additions and 3 deletions
|
@ -139,7 +139,7 @@ Like directives, named matcher definitions must go inside the site blocks that u
|
|||
|
||||
A named matcher definition constitutes a _matcher set_. Matchers in a set are AND'ed together; i.e. all must match. For example, if you have both a `header` and `path` matcher in the set, both must match.
|
||||
|
||||
For most matchers that accept multiple values, those values are OR'ed; i.e. one must match in order for the matcher to match.
|
||||
For some matchers that accept multiple values, those values are OR'ed; i.e. one must match in order for the matcher to match. See the docs for each matcher for details on how they are merged.
|
||||
|
||||
|
||||
|
||||
|
@ -249,14 +249,24 @@ By request header fields.
|
|||
- If enclosed by `*`, it performs a fast substring match.
|
||||
- Otherwise, it is a fast exact match.
|
||||
|
||||
If used multiple times in the same named matcher, matchers with the same header field will be merged, which will OR the values of each.
|
||||
|
||||
#### Example:
|
||||
|
||||
Match requests with the Connection header containing `Upgrade`.
|
||||
Match requests with the `Connection` header containing `Upgrade`.
|
||||
|
||||
```caddy-d
|
||||
header Connection *Upgrade*
|
||||
```
|
||||
|
||||
Match requests with the `Foo` header containing `bar` OR `baz`.
|
||||
```caddy-d
|
||||
@foo {
|
||||
header Foo bar
|
||||
header Foo baz
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
### header_regexp
|
||||
|
@ -267,6 +277,8 @@ header_regexp [<name>] <field> <regexp>
|
|||
|
||||
Like `header`, but supports regular expressions. Capture groups can be accessed via placeholder like `{http.regexp.name.capture_group}` where `name` is the name of the regular expression (optional, but recommended) and `capture_group` is either the name or number of the capture group in the expression. Capture group `0` is the full regexp match, `1` is the first capture group, `2` is the second capture group, and so on.
|
||||
|
||||
There can only be multiple `header_regexp` matchers per named matcher, but only one per field. Each field will be AND'ed.
|
||||
|
||||
#### Example:
|
||||
|
||||
Match requests where the Cookie header contains `login_` followed by a hex string, with a capture group that can be accessed with `{http.regexp.login.1}`.
|
||||
|
@ -285,6 +297,8 @@ host <hosts...>
|
|||
|
||||
Matches request by the `Host` header field of the request. It is not common to use this in the Caddyfile, since most site blocks already indicate hosts in the address of the site. This matcher is mostly used in site blocks that don't define specific hostnames.
|
||||
|
||||
There can be multiple `host` matchers per named matcher, merging them. The hosts will be OR'ed.
|
||||
|
||||
#### Example:
|
||||
|
||||
```caddy-d
|
||||
|
@ -301,6 +315,8 @@ method <verbs...>
|
|||
|
||||
By the method (verb) of the HTTP request. Verbs should be uppercase, like `POST`. Can match one or many methods.
|
||||
|
||||
There can be multiple `method` matchers per named matcher, merging them. The verbs will be OR'ed.
|
||||
|
||||
#### Examples:
|
||||
|
||||
Match requests with the `GET` method.
|
||||
|
@ -380,6 +396,8 @@ By request path, meaning the path component of the request's URI. Path matches a
|
|||
- On both sides, for a substring match (`*/contains/*`)
|
||||
- In the middle, for a globular match (`/accounts/*/info`)
|
||||
|
||||
There can be multiple `path` matchers per named matcher, merging them. The paths will be OR'ed.
|
||||
|
||||
|
||||
---
|
||||
### path_regexp
|
||||
|
@ -390,6 +408,8 @@ path_regexp [<name>] <regexp>
|
|||
|
||||
Like `path`, but supports regular expressions. Capture groups can be accessed via placeholder like `{http.regexp.name.capture_group}` where `name` is the name of the regular expression (optional, but recommended) and `capture_group` is either the name or number of the capture group in the expression. Capture group `0` is the full regexp match, `1` is the first capture group, `2` is the second capture group, and so on.
|
||||
|
||||
There can only be one `path_regexp` matcher per named matcher.
|
||||
|
||||
#### Example:
|
||||
|
||||
Match requests where the path ends a 6 character hex string followed by `.css` or `.js` as the file extension, with capture groups that can be accessed with `{http.regexp.static.1}` and `{http.regexp.static.2}` for each part enclosed in `( )`, respectively.
|
||||
|
@ -408,6 +428,8 @@ protocol http|https|grpc
|
|||
|
||||
By request protocol.
|
||||
|
||||
There can only be one `protocol` matcher per named matcher.
|
||||
|
||||
|
||||
---
|
||||
### query
|
||||
|
@ -416,7 +438,9 @@ By request protocol.
|
|||
query <key>=<val>...
|
||||
```
|
||||
|
||||
By query string parameters. Should be a sequence of `key=value` pairs. Keys are matched exactly, case-sensitively. Values are matched exactly, but also support `*` to match any value.
|
||||
By query string parameters. Should be a sequence of `key=value` pair. Keys are matched exactly, case-sensitively. Values can contain placeholders. Values are matched exactly, but also support `*` to match any value.
|
||||
|
||||
There can be multiple `query` matchers per named matcher, and pairs with the same keys will be merged together, which will OR the values of each.
|
||||
|
||||
#### Example:
|
||||
|
||||
|
@ -436,6 +460,8 @@ remote_ip <ranges...>
|
|||
|
||||
By remote (client) IP address. If `X-Forwarded-For` is passed in request headers, this will be used for remote IP address. Accepts exact IPs or CIDR ranges.
|
||||
|
||||
There can be multiple `remote_ip` matchers per named matcher, merging them. The addresses will be OR'ed.
|
||||
|
||||
#### Example:
|
||||
|
||||
Match requests from private IPv4 addresses.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue