// Copyright 2024 RustFS Team // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /// TLS related environment variable names and default values /// Environment variable to enable TLS key logging /// When set to "1", RustFS will log TLS keys to the specified file for debugging purposes. /// By default, this is disabled. /// To enable, set the environment variable RUSTFS_TLS_KEYLOG=1 pub const ENV_TLS_KEYLOG: &str = "RUSTFS_TLS_KEYLOG"; /// Default value for TLS key logging /// By default, RustFS does not log TLS keys. /// To change this behavior, set the environment variable RUSTFS_TLS_KEYLOG=1 pub const DEFAULT_TLS_KEYLOG: bool = false; /// Environment variable to trust system CA certificates /// When set to "1", RustFS will trust system CA certificates in addition to any /// custom CA certificates provided in the configuration. /// By default, this is disabled. /// To enable, set the environment variable RUSTFS_TRUST_SYSTEM_CA=1 pub const ENV_TRUST_SYSTEM_CA: &str = "RUSTFS_TRUST_SYSTEM_CA"; /// Default value for trusting system CA certificates /// By default, RustFS does not trust system CA certificates. /// To change this behavior, set the environment variable RUSTFS_TRUST_SYSTEM_CA=1 pub const DEFAULT_TRUST_SYSTEM_CA: bool = false; /// Environment variable for an extra outbound root CA certificate bundle. /// Use this to trust an internal CA for outbound HTTPS clients without replacing /// the default operating-system/web PKI roots via SSL_CERT_FILE. pub const ENV_RUSTFS_EXTRA_CA_CERT: &str = "RUSTFS_EXTRA_CA_CERT"; /// Environment variable to trust leaf certificates as CA /// When set to "1", RustFS will treat leaf certificates as CA certificates for trust validation. /// By default, this is disabled. /// To enable, set the environment variable RUSTFS_TRUST_LEAF_CERT_AS_CA=1 pub const ENV_TRUST_LEAF_CERT_AS_CA: &str = "RUSTFS_TRUST_LEAF_CERT_AS_CA"; /// Default value for trusting leaf certificates as CA /// By default, RustFS does not trust leaf certificates as CA. /// To change this behavior, set the environment variable RUSTFS_TRUST_LEAF_CERT_AS_CA=1 pub const DEFAULT_TRUST_LEAF_CERT_AS_CA: bool = false; /// Default filename for client CA certificate /// client_ca.crt (CA bundle for verifying client certificates in server mTLS) pub const RUSTFS_CLIENT_CA_CERT_FILENAME: &str = "client_ca.crt"; /// Environment variable for client certificate file path /// RUSTFS_MTLS_CLIENT_CERT /// Specifies the file path to the client certificate used for mTLS authentication. /// If not set, RustFS will look for the default filename "client_cert.pem" in the current directory. /// To set, use the environment variable RUSTFS_MTLS_CLIENT_CERT=/path/to/client_cert.pem pub const ENV_MTLS_CLIENT_CERT: &str = "RUSTFS_MTLS_CLIENT_CERT"; /// Default filename for client certificate /// client_cert.pem pub const RUSTFS_CLIENT_CERT_FILENAME: &str = "client_cert.pem"; /// Environment variable for client private key file path /// RUSTFS_MTLS_CLIENT_KEY /// Specifies the file path to the client private key used for mTLS authentication. /// If not set, RustFS will look for the default filename "client_key.pem" in the current directory. /// To set, use the environment variable RUSTFS_MTLS_CLIENT_KEY=/path/to/client_key.pem pub const ENV_MTLS_CLIENT_KEY: &str = "RUSTFS_MTLS_CLIENT_KEY"; /// Default filename for client private key /// client_key.pem pub const RUSTFS_CLIENT_KEY_FILENAME: &str = "client_key.pem"; /// RUSTFS_SERVER_MTLS_ENABLE /// Environment variable to enable server mTLS /// When set to "1", RustFS server will require client certificates for authentication. /// By default, this is disabled. /// To enable, set the environment variable RUSTFS_SERVER_MTLS_ENABLE=1 pub const ENV_SERVER_MTLS_ENABLE: &str = "RUSTFS_SERVER_MTLS_ENABLE"; /// Default value for enabling server mTLS /// By default, RustFS server mTLS is disabled. /// To change this behavior, set the environment variable RUSTFS_SERVER_MTLS_ENABLE=1 pub const DEFAULT_SERVER_MTLS_ENABLE: bool = false; // ── HTTP Transport Tuning Parameters ── /// Environment variable for HTTP/2 initial stream window size (bytes) /// Default: 4194304 (4 MB) pub const ENV_H2_INITIAL_STREAM_WINDOW_SIZE: &str = "RUSTFS_H2_INITIAL_STREAM_WINDOW_SIZE"; pub const DEFAULT_H2_INITIAL_STREAM_WINDOW_SIZE: u32 = 4 * 1024 * 1024; // 4 MB /// Environment variable for HTTP/2 initial connection window size (bytes) /// Default: 8388608 (8 MB) pub const ENV_H2_INITIAL_CONN_WINDOW_SIZE: &str = "RUSTFS_H2_INITIAL_CONN_WINDOW_SIZE"; pub const DEFAULT_H2_INITIAL_CONN_WINDOW_SIZE: u32 = 8 * 1024 * 1024; // 8 MB /// Environment variable for HTTP/2 max frame size (bytes) /// Range: 16384 (16 KB) to 16777216 (16 MB) per RFC 7540 /// Default: 524288 (512 KB) pub const ENV_H2_MAX_FRAME_SIZE: &str = "RUSTFS_H2_MAX_FRAME_SIZE"; pub const DEFAULT_H2_MAX_FRAME_SIZE: u32 = 512 * 1024; // 512 KB /// Environment variable for HTTP/2 max header list size (bytes) /// Default: 65536 (64 KB) pub const ENV_H2_MAX_HEADER_LIST_SIZE: &str = "RUSTFS_H2_MAX_HEADER_LIST_SIZE"; pub const DEFAULT_H2_MAX_HEADER_LIST_SIZE: u32 = 64 * 1024; // 64 KB /// Environment variable for HTTP/2 max concurrent streams /// Default: 2048 pub const ENV_H2_MAX_CONCURRENT_STREAMS: &str = "RUSTFS_H2_MAX_CONCURRENT_STREAMS"; pub const DEFAULT_H2_MAX_CONCURRENT_STREAMS: u32 = 2048; /// Environment variable for HTTP/2 keep-alive interval (seconds) /// Default: 20 pub const ENV_H2_KEEP_ALIVE_INTERVAL: &str = "RUSTFS_H2_KEEP_ALIVE_INTERVAL"; pub const DEFAULT_H2_KEEP_ALIVE_INTERVAL: u64 = 20; /// Environment variable for HTTP/2 keep-alive timeout (seconds) /// Default: 10 pub const ENV_H2_KEEP_ALIVE_TIMEOUT: &str = "RUSTFS_H2_KEEP_ALIVE_TIMEOUT"; pub const DEFAULT_H2_KEEP_ALIVE_TIMEOUT: u64 = 10; /// Environment variable for HTTP/1.1 header read timeout (seconds) /// Default: 75 /// /// In hyper's HTTP/1.1 stack this timeout is armed as soon as the connection is /// ready to read the *next* request head, so on a keep-alive connection it also /// bounds how long an idle upstream connection is allowed to sit before RustFS /// closes it. Reverse proxies (Caddy, Nginx) pool upstream connections and keep /// them idle far longer than a few seconds (Caddy ≈ 2 min, Nginx = 60 s by /// default). A short value here makes RustFS FIN pooled connections while the /// proxy still believes they are alive; the proxy then reuses a dead socket and /// the client sees `socket hang up` / connection reset — most visibly on /// non-idempotent `PUT` uploads, which proxies will not transparently retry /// (see issue #3076). /// /// The default is therefore set above common proxy idle-keepalive windows. /// Operators fronting RustFS with a proxy should keep this larger than the /// proxy's upstream idle-keepalive, or lower the proxy's keepalive below this /// value. Environments that expose RustFS directly to untrusted slow clients and /// want tighter slowloris protection can lower it via the env var below. /// /// The same budget bounds the TLS handshake on the listener, so an unauthenticated /// peer cannot park an accept task and its socket indefinitely by opening a /// connection and then stalling the handshake. pub const ENV_HTTP1_HEADER_READ_TIMEOUT: &str = "RUSTFS_HTTP1_HEADER_READ_TIMEOUT"; pub const DEFAULT_HTTP1_HEADER_READ_TIMEOUT: u64 = 75; /// Environment variable for HTTP/1.1 max buffer size (bytes) /// Default: 65536 (64 KB) pub const ENV_HTTP1_MAX_BUF_SIZE: &str = "RUSTFS_HTTP1_MAX_BUF_SIZE"; pub const DEFAULT_HTTP1_MAX_BUF_SIZE: usize = 64 * 1024; // 64 KB /// Environment variable for the S3 request-body inter-chunk read timeout /// (seconds). Default: 300. Set to 0 to disable. /// /// This bounds how long a `PutObject`/upload may wait for the *next* body chunk /// while more bytes are still expected. It resets on every chunk, so it does not /// penalize slow-but-progressing uploads — it only fires when a peer sends a /// partial body and then goes silent *without* closing the connection (no EOF). /// A reverse proxy or CDN that forwards a truncated body this way would /// otherwise make RustFS wait forever for bytes that never arrive; with this /// timeout the stalled read is aborted and logged with the received/expected /// byte counts, turning a silent hang into an actionable diagnostic (issue /// #3076). A short-body that arrives with a proper EOF is already rejected /// promptly and is unaffected by this setting. pub const ENV_HTTP_REQUEST_BODY_READ_TIMEOUT: &str = "RUSTFS_HTTP_REQUEST_BODY_READ_TIMEOUT"; pub const DEFAULT_HTTP_REQUEST_BODY_READ_TIMEOUT: u64 = 300; // ── TLS Hot Reload Parameters ── /// Environment variable to enable TLS certificate hot reload /// Default: false /// To enable, set the environment variable RUSTFS_TLS_RELOAD_ENABLE=1 pub const ENV_TLS_RELOAD_ENABLE: &str = "RUSTFS_TLS_RELOAD_ENABLE"; /// Default value for TLS certificate hot reload /// By default, RustFS does not reload TLS certificates automatically. pub const DEFAULT_TLS_RELOAD_ENABLE: bool = false; /// Environment variable for TLS certificate reload interval (seconds) /// Default: 30 seconds. Minimum: 5 seconds. pub const ENV_TLS_RELOAD_INTERVAL: &str = "RUSTFS_TLS_RELOAD_INTERVAL"; /// Default interval for TLS certificate reload check pub const DEFAULT_TLS_RELOAD_INTERVAL: u64 = 30;