Configuration: core directives
This page covers core KDL directives that control Ferron’s global HTTP behavior, network settings, and system-level limits.
Global-only directives
HTTP protocol & performance
default_http_port <default_http_port: integer|null>- This directive specifies the default port for HTTP connections. If set as
default_http_port #null, the implicit default HTTP port is disabled. Default:default_http_port 80
- This directive specifies the default port for HTTP connections. If set as
default_https_port <default_https_port: integer|null>- This directive specifies the default port for HTTPS connections. If set as
default_https_port #null, the implicit default HTTPS port is disabled. Default:default_https_port 443
- This directive specifies the default port for HTTPS connections. If set as
protocols <protocol: string> [<protocol: string> ...]- This directive specifies the enabled protocols for the web server. The supported protocols are
"h1"(HTTP/1.x),"h2"(HTTP/2) and"h3"(HTTP/3; experimental). Default:protocols "h1" "h2"
- This directive specifies the enabled protocols for the web server. The supported protocols are
timeout <timeout: integer|null>- This directive specifies the maximum time (in milliseconds) for server to process the request, after which the server resets the connection. If set as
timeout #null, the timeout is disabled. It’s not recommended to disable the timeout, as this might leave the server vulnerable to Slow HTTP attacks. Default:timeout 300000
- This directive specifies the maximum time (in milliseconds) for server to process the request, after which the server resets the connection. If set as
h2_initial_window_size <h2_initial_window_size: integer>- This directive specifies the HTTP/2 initial window size. Default: Hyper defaults
h2_max_frame_size <h2_max_frame_size: integer>- This directive specifies the maximum HTTP/2 frame size. Default: Hyper defaults
h2_max_concurrent_streams <h2_max_concurrent_streams: integer>- This directive specifies the maximum amount of concurrent HTTP/2 streams. Default: Hyper defaults
h2_max_header_list_size <h2_max_header_list_size: integer>- This directive specifies the maximum HTTP/2 frame size. Default: Hyper defaults
h2_enable_connect_protocol [h2_enable_connect_protocol: bool]- This directive specifies whether the CONNECT protocol in HTTP/2 is enabled. Default: Hyper defaults
protocol_proxy [enable_proxy_protocol: bool]- This directive specifies whether the PROXY protocol acceptation is enabled. If enabled, the server will expect the PROXY protocol header at the beginning of each connection. Default:
protocol_proxy #false
- This directive specifies whether the PROXY protocol acceptation is enabled. If enabled, the server will expect the PROXY protocol header at the beginning of each connection. Default:
buffer_request <request_buffer_size: integer|null>- This directive specifies the buffer size in bytes for incoming requests. If set as
buffer_request #null, the request buffer is disabled. The request buffer can serve as an additional protection for underlying backend servers against Slowloris-style attacks. Default:buffer_request #null
- This directive specifies the buffer size in bytes for incoming requests. If set as
buffer_response <response_buffer_size: integer|null>- This directive specifies the buffer size in bytes for outgoing responses. If set as
buffer_response #null, the response buffer is disabled. Default:buffer_response #null
- This directive specifies the buffer size in bytes for outgoing responses. If set as
Configuration example:
* {
default_http_port 80
default_https_port 443
protocols "h1" "h2" "h3"
timeout 300000
h2_initial_window_size 65536
h2_max_frame_size 16384
h2_max_concurrent_streams 100
h2_max_header_list_size 8192
h2_enable_connect_protocol
protocol_proxy #false
buffer_request #null
buffer_response #null
}Networking & system
listen_ip <listen_ip: string>- This directive specifies the IP address to listen. Default:
listen_ip "::"
- This directive specifies the IP address to listen. Default:
io_uring [enable_io_uring: bool|null]- This directive specifies whether
io_uringis enabled. If set asio_uring #null(supported on Ferron 2.4.0 and newer),io_uringis enabled with fallback withio_uringdisabled. This directive has no effect for systems that don’t supportio_uringand for web server builds that use Tokio instead of Monoio. Default:io_uring #null(Ferron 2.4.0 or newer),io_uring #true(Ferron 2.3.2 and older)
- This directive specifies whether
tcp_send_buffer <tcp_send_buffer: integer>- This directive specifies the send buffer size in bytes for TCP listeners. Default: none
tcp_recv_buffer <tcp_recv_buffer: integer>- This directive specifies the receive buffer size in bytes for TCP listeners. Default: none
Configuration example:
* {
listen_ip "0.0.0.0"
io_uring
tcp_send_buffer 65536
tcp_recv_buffer 65536
}