Reference

Reference: routes

tenants[].applications[].routes

Syntaxroutes: [{...}, ...]
Default[]
Contexttenants[].applications[]
Reloadapplies on reload

Routes with their own runtime: prefix (default), exact or regex paths plus method, header and query matchers; see ADR-0050.

tenants[].applications[].routes[].allow

Syntaxallow: [<string>, ...]
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Client addresses and CIDR blocks allowed; if set, only these clients (403 else).

tenants[].applications[].routes[].basic_auth

Syntaxbasic_auth: {...}
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

HTTP basic authentication against an htpasswd file.

tenants[].applications[].routes[].basic_auth.realm

Syntaxrealm: <string>
DefaultRestricted
Contexttenants[].applications[].routes[].basic_auth
Reloadapplies on reload

Realm shown by the browser (default Restricted).

tenants[].applications[].routes[].basic_auth.users_file

Syntaxusers_file: <string>
Defaultrequired
Contexttenants[].applications[].routes[].basic_auth
Reloadapplies on reload

Absolute path of an htpasswd file (bcrypt, SHA-256/512 crypt or Apache MD5 entries).

tenants[].applications[].routes[].cors

Syntaxcors: {...}
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Cross-origin resource sharing; preflight requests are answered by ScalWS.

tenants[].applications[].routes[].cors.allow_credentials

Syntaxallow_credentials: true | false
Defaultfalse
Contexttenants[].applications[].routes[].cors
Reloadapplies on reload

Allow credentials (cookies, authorization); not with allow_origins: ["*"].

tenants[].applications[].routes[].cors.allow_headers

Syntaxallow_headers: [<string>, ...]
Default["DNT","Keep-Alive","User-Agent","X-Requested-With","If-Modified-Since","Cache-Control","Content-Type","Range","Authorization"]
Contexttenants[].applications[].routes[].cors
Reloadapplies on reload

Request headers allowed in preflight answers (ingress-nginx defaults).

tenants[].applications[].routes[].cors.allow_methods

Syntaxallow_methods: [<string>, ...]
Default["GET","PUT","POST","DELETE","PATCH","OPTIONS"]
Contexttenants[].applications[].routes[].cors
Reloadapplies on reload

Methods allowed in preflight answers (default: GET, PUT, POST, DELETE, PATCH, OPTIONS).

tenants[].applications[].routes[].cors.allow_origins

Syntaxallow_origins: [<string>, ...]
Defaultrequired
Contexttenants[].applications[].routes[].cors
Reloadapplies on reload

Allowed origins, e.g. https://app.example.com, https://*.example.com, or ["*"].

tenants[].applications[].routes[].cors.expose_headers

Syntaxexpose_headers: [<string>, ...]
Defaultnone
Contexttenants[].applications[].routes[].cors
Reloadapplies on reload

Response headers exposed to the page.

tenants[].applications[].routes[].cors.max_age

Syntaxmax_age: <duration> (e.g. 30s)
Default1728000s
Contexttenants[].applications[].routes[].cors
Reloadapplies on reload

How long a preflight answer may be cached, at most 365 days (default 20 days).

tenants[].applications[].routes[].deny

Syntaxdeny: [<string>, ...]
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Client addresses and CIDR blocks refused with 403; checked after allow.

tenants[].applications[].routes[].headers

Syntaxheaders: [{...}, ...]
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Request headers that must match (all of them).

tenants[].applications[].routes[].headers[].name

Syntaxname: <string>
Defaultrequired
Contexttenants[].applications[].routes[].headers[]
Reloadapplies on reload

Header name (case-insensitive) or query parameter name.

tenants[].applications[].routes[].headers[].regex

Syntaxregex: <string>
Defaultnone
Contexttenants[].applications[].routes[].headers[]
Reloadapplies on reload

Regular expression the value must match (searched anywhere unless anchored).

tenants[].applications[].routes[].headers[].value

Syntaxvalue: <string>
Defaultnone
Contexttenants[].applications[].routes[].headers[]
Reloadapplies on reload

Exact, case-sensitive value.

tenants[].applications[].routes[].https_redirect

Syntaxhttps_redirect: true | false
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Answer plain-HTTP requests that select this route with a 301 to HTTPS; unset: the application’s https_redirect.

tenants[].applications[].routes[].max_body

Syntaxmax_body: <size> (e.g. 16KiB)
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Largest request body; overrides limits.max_request_body_bytes; 413 above.

tenants[].applications[].routes[].methods

Syntaxmethods: [<string>, ...]
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Request methods this route matches, e.g. [GET, POST]; empty: any.

tenants[].applications[].routes[].path

Syntaxpath: <string>
Defaultrequired
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Path of the route; how it is compared depends on path_type.

tenants[].applications[].routes[].path_type

Syntaxpath_type: prefix | exact | regex
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

prefix (default, whole segments, longest first), exact or regex (anchored at the start, in configuration order).

tenants[].applications[].routes[].query

Syntaxquery: [{...}, ...]
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Query parameters that must match (all of them, decoded, first occurrence).

tenants[].applications[].routes[].query[].name

Syntaxname: <string>
Defaultrequired
Contexttenants[].applications[].routes[].query[]
Reloadapplies on reload

Header name (case-insensitive) or query parameter name.

tenants[].applications[].routes[].query[].regex

Syntaxregex: <string>
Defaultnone
Contexttenants[].applications[].routes[].query[]
Reloadapplies on reload

Regular expression the value must match (searched anywhere unless anchored).

tenants[].applications[].routes[].query[].value

Syntaxvalue: <string>
Defaultnone
Contexttenants[].applications[].routes[].query[]
Reloadapplies on reload

Exact, case-sensitive value.

tenants[].applications[].routes[].request_headers

Syntaxrequest_headers: {...}
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Changes to the request headers (after the built-in proxy headers).

tenants[].applications[].routes[].request_headers.add

Syntaxadd: {<key>: <string>, ...}
Defaultnone
Contexttenants[].applications[].routes[].request_headers
Reloadapplies on reload

Headers added next to any present.

tenants[].applications[].routes[].request_headers.remove

Syntaxremove: [<string>, ...]
Defaultnone
Contexttenants[].applications[].routes[].request_headers
Reloadapplies on reload

Headers removed.

tenants[].applications[].routes[].request_headers.set

Syntaxset: {<key>: <string>, ...}
Defaultnone
Contexttenants[].applications[].routes[].request_headers
Reloadapplies on reload

Headers set to this value, replacing any present.

tenants[].applications[].routes[].request_timeout

Syntaxrequest_timeout: <duration> (e.g. 30s)
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Time from the route match until the response head; 504 when exceeded.

tenants[].applications[].routes[].response_headers

Syntaxresponse_headers: {...}
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Changes to every response of the route, including errors generated by ScalWS.

tenants[].applications[].routes[].response_headers.add

Syntaxadd: {<key>: <string>, ...}
Defaultnone
Contexttenants[].applications[].routes[].response_headers
Reloadapplies on reload

Headers added next to any present.

tenants[].applications[].routes[].response_headers.remove

Syntaxremove: [<string>, ...]
Defaultnone
Contexttenants[].applications[].routes[].response_headers
Reloadapplies on reload

Headers removed.

tenants[].applications[].routes[].response_headers.set

Syntaxset: {<key>: <string>, ...}
Defaultnone
Contexttenants[].applications[].routes[].response_headers
Reloadapplies on reload

Headers set to this value, replacing any present.

tenants[].applications[].routes[].rewrite

Syntaxrewrite: {...}
Defaultnone
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Path and Host rewrite before the runtime.

tenants[].applications[].routes[].rewrite.host

Syntaxhost: <string>
Defaultnone
Contexttenants[].applications[].routes[].rewrite
Reloadapplies on reload

Host sent upstream (implies preserve_host: false), host or host:port.

tenants[].applications[].routes[].rewrite.path

Syntaxpath: <string>
Defaultnone
Contexttenants[].applications[].routes[].rewrite
Reloadapplies on reload

Full path; $1..$9 from a regex route, $0 the match, $$ a literal $; ?... in it sets the query (else the query is kept).

tenants[].applications[].routes[].rewrite.prefix

Syntaxprefix: <string>
Defaultnone
Contexttenants[].applications[].routes[].rewrite
Reloadapplies on reload

Replaces the matched prefix (prefix routes only).

tenants[].applications[].routes[].runtime

Syntaxruntime: {...}
Defaultrequired
Contexttenants[].applications[].routes[]
Reloadapplies on reload

Runtime that handles requests under the path.