pub struct ServerConfig {Show 28 fields
pub cors_allow_all: bool,
pub cors_allow_origins: String,
pub cors_allow_credentials: String,
pub cors_allow_methods: String,
pub cors_allow_headers: String,
pub cors_expose_headers: String,
pub cors_max_age: String,
pub csp: String,
pub security_headers: bool,
pub nanos_headers: bool,
pub client_hints: bool,
pub static_cache_control: String,
pub error_format_text: bool,
pub proxy_status: String,
pub proxy_name: String,
pub proxy_status_next_hop: bool,
pub cache_status: bool,
pub forwarded_header: bool,
pub trusted_proxies: TrustedProxies,
pub client_ip_forwarded: bool,
pub metrics_allow: TrustedProxies,
pub shutdown_delay_secs: u64,
pub early_hints_http1: bool,
pub compression_dictionaries: Vec<String>,
pub directory_listing: bool,
pub log_format: String,
pub log_privacy: LogPrivacy,
pub request_allocation_size: i64,
}Expand description
All runtime-configurable settings for one server instance.
Fields map 1-to-1 to RWS_CONFIG_* environment variable names documented
in Config. Default values match the environment-variable defaults.
Construct via ServerConfig::from_env() at startup or
ServerConfig::default() in tests.
Fields§
§cors_allow_all: boolRWS_CONFIG_CORS_ALLOW_ALL — when true, all cross-origin requests are
reflected back as allowed (echo the Origin header). Overrides all
other CORS fields. Default: true.
cors_allow_origins: StringRWS_CONFIG_CORS_ALLOW_ORIGINS — comma-separated list of allowed
origins when cors_allow_all is false. Default: "" (none).
cors_allow_credentials: StringRWS_CONFIG_CORS_ALLOW_CREDENTIALS — value for the
Access-Control-Allow-Credentials response header. Default: "".
cors_allow_methods: StringRWS_CONFIG_CORS_ALLOW_METHODS — value for
Access-Control-Allow-Methods. Default: "".
cors_allow_headers: StringRWS_CONFIG_CORS_ALLOW_HEADERS — value for
Access-Control-Allow-Headers. Default: "".
cors_expose_headers: StringRWS_CONFIG_CORS_EXPOSE_HEADERS — value for
Access-Control-Expose-Headers. Default: "".
cors_max_age: StringRWS_CONFIG_CORS_MAX_AGE — value for Access-Control-Max-Age.
Default: "86400".
csp: StringRWS_CONFIG_CSP — Content-Security-Policy header value. An empty
string suppresses the header. Unset: default-src 'self' when
security_headers is on, otherwise no header
(18.0.0; was always default-src 'self').
security_headers: boolRWS_CONFIG_SECURITY_HEADERS — send X-Frame-Options: SAMEORIGIN,
Referrer-Policy and Permissions-Policy on every response (and the
default CSP, unless RWS_CONFIG_CSP is set). Off by default (18.0.0;
was always on): nginx sends none of them, and over HTTP/2 every header
costs HPACK work. X-Content-Type-Options: nosniff is always sent.
nanos_headers: boolRWS_CONFIG_NANOS_HEADERS — send Date-Unix-Epoch-Nanos and, for
static files, Last-Modified-Unix-Epoch-Nanos. Off by default (18.0.0;
was always on): they change on every response, so HTTP/2 can’t index
them, and Date/Last-Modified carry the same information to the second.
client_hints: boolRWS_CONFIG_CLIENT_HINTS — send Accept-CH, Critical-CH and the
client hints in Vary on every response. Off by default (18.0.0; was
always on): ~700 bytes per response, and Critical-CH makes Chromium
retry a request that came without the hints.
static_cache_control: StringRWS_CONFIG_STATIC_CACHE_CONTROL — Cache-Control for static files
(other responses keep no-store, …). Default "no-cache" (18.0.0; was
no-store, …): browsers keep the file and revalidate it with
If-None-Match / If-Modified-Since (a 304). An empty value keeps
the no-store default for static files too.
error_format_text: boolRWS_CONFIG_ERROR_FORMAT — "text" sends rws-made errors as plain
text (502 Bad Gateway) as before 18.17.0; anything else (default
"problem") sends RFC 9457 application/problem+json.
proxy_status: StringRWS_CONFIG_PROXY_STATUS — when proxied responses carry
Proxy-Status (RFC 9209): "always" (default), "errors", "off".
proxy_name: StringRWS_CONFIG_PROXY_NAME — this hop’s name in Proxy-Status (and
Cache-Status). Default "rws".
proxy_status_next_hop: boolRWS_CONFIG_PROXY_STATUS_NEXT_HOP — add the backend address
(next-hop) and failure text (details). Default false.
cache_status: boolRWS_CONFIG_CACHE_STATUS — CacheLayer responses carry
Cache-Status (RFC 9211). Default true.
forwarded_header: boolRWS_CONFIG_FORWARDED_HEADER — proxied requests carry RFC 7239
Forwarded beside X-Forwarded-*. Default on; "off" leaves it out.
trusted_proxies: TrustedProxiestrusted_proxies (18.24.0): peers whose X-Forwarded-* and
Forwarded headers are passed on; from anyone else they are
replaced.
client_ip_forwarded: boolRWS_CONFIG_CLIENT_IP (18.27.0): "forwarded" (default) takes the
client’s address from a trusted proxy’s X-Forwarded-For
(ip_filter::client_ip); "peer" always uses the TCP peer.
metrics_allow: TrustedProxiesRWS_CONFIG_METRICS_ALLOW (18.27.0): clients GET /metrics answers
(the client as ip_filter::client_ip sees it); anyone else gets a
404. Default loopback and the private ranges, where scrapers sit;
* everyone (before 18.27), none no one.
shutdown_delay_secs: u64RWS_CONFIG_SHUTDOWN_DELAY_SECS (18.27.0): on SIGTERM, /readyz
answers 503 at once but connections are still accepted this long
before draining, so a load balancer takes the pod out first. Default 5.
early_hints_http1: boolRWS_CONFIG_EARLY_HINTS_HTTP1 — also send 103 Early Hints to
HTTP/1.1 clients. Default false: browsers use them only over HTTP/2
and HTTP/3, and some old HTTP/1.1 clients mishandle extra 1xx
responses (18.12.0).
compression_dictionaries: Vec<String>RWS_CONFIG_COMPRESSION_DICTIONARIES — URL patterns (/js/app.*.js,
comma-separated) of static files used as compression dictionaries:
later versions go out as dcz / dcb deltas against the one the
browser has (18.12.0). Empty by default.
directory_listing: boolRWS_CONFIG_DIRECTORY_LISTING — list a directory that has no
index.html. Default true; false answers 404 instead (18.8.4).
log_format: StringRWS_CONFIG_LOG_FORMAT — "json" or "combined". Default: "json".
log_privacy: LogPrivacyWhat the access log may say about clients (18.33.0):
RWS_CONFIG_ACCESS_LOG_ANONYMIZE_IP, RWS_CONFIG_LOG_REDACT_HEADERS,
RWS_CONFIG_LOG_REDACT_QUERY. Default: all off.
request_allocation_size: i64RWS_CONFIG_REQUEST_ALLOCATION_SIZE_IN_BYTES — bytes allocated for
incoming request parsing. Default: 10000.
Implementations§
Source§impl ServerConfig
impl ServerConfig
Sourcepub fn from_env() -> ServerConfig
pub fn from_env() -> ServerConfig
Build a ServerConfig by reading all RWS_CONFIG_* environment
variables. Missing variables fall back to their default values.
Each call reads every variable — the environment lock is taken once
per variable — so per-request code uses ServerConfig::current.
Sourcepub fn current() -> Arc<ServerConfig> ⓘ
pub fn current() -> Arc<ServerConfig> ⓘ
The configuration from the environment, read once and shared: an
atomic load and an Arc clone per call instead of ten getenvs.
Rebuilt after invalidate — which config_reload::reload() (SIGHUP,
POST /admin/config/reload) and every config writer in the crate call,
so hot reload still takes effect on the next request.
Trait Implementations§
Source§impl Clone for ServerConfig
impl Clone for ServerConfig
Source§fn clone(&self) -> ServerConfig
fn clone(&self) -> ServerConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ServerConfig
impl Debug for ServerConfig
Source§impl Default for ServerConfig
impl Default for ServerConfig
Source§fn default() -> ServerConfig
fn default() -> ServerConfig
Source§impl PartialEq for ServerConfig
impl PartialEq for ServerConfig
impl StructuralPartialEq for ServerConfig
Auto Trait Implementations§
impl Freeze for ServerConfig
impl RefUnwindSafe for ServerConfig
impl Send for ServerConfig
impl Sync for ServerConfig
impl Unpin for ServerConfig
impl UnsafeUnpin for ServerConfig
impl UnwindSafe for ServerConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
map-response-body only.Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
trace only.Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
trace only.