--- title: "5. Bind and Server Options" linkTitle: "5. Bind & Server Options" weight: 160 description: "Listener, server, default-server, and DNS resolution options" icon: fa-solid fa-network-wired module: [HAPROXY] categories: [Reference] aliases: - /haproxy/configuration/bind-and-server-options/ - /docs/haproxy/configuration/bind-and-server-options/ - /haproxy/bind-and-server-options/ upstream_link: "https://docs.haproxy.org/3.4/configuration.html" upstream_name: "HAProxy 3.4 Configuration Manual" upstream_ref: "v3.4.4, chapter 5" --- The "bind", "server" and "default-server" keywords support a number of settings depending on some build options and on the system HAProxy was built on. These settings generally each consist in one word sometimes followed by a value, written on the same line as the "bind" or "server" line. All these options are described in this section. ## 5.1. Bind options {#section-5-1} The "bind" keyword supports a certain number of settings which are all passed as arguments on the same line. The order in which those arguments appear makes no importance, provided that they appear after the bind address. All of these parameters are optional. Some of them consist in a single words (booleans), while other ones expect a value after them. In this case, the value must be provided immediately after the setting name. The currently supported settings are the following ones. **`accept-netscaler-cip `** ```haproxy accept-netscaler-cip ``` Enforces the use of the NetScaler Client IP insertion protocol over any connection accepted by any of the TCP sockets declared on the same line. The NetScaler Client IP insertion protocol dictates the layer 3/4 addresses of the incoming connection to be used everywhere an address is used, with the only exception of "tcp-request connection" rules which will only see the real connection address. Logs will reflect the addresses indicated in the protocol, unless it is violated, in which case the real address will still be used. This keyword combined with support from external components can be used as an efficient and reliable alternative to the X-Forwarded-For mechanism which is not always reliable and not even always usable. See also "tcp-request connection expect-netscaler-cip" for a finer-grained setting of which client is allowed to use the protocol. **`accept-proxy`** ```haproxy accept-proxy ``` Enforces the use of the PROXY protocol over any connection accepted by any of the sockets declared on the same line. Versions 1 and 2 of the PROXY protocol are supported and correctly detected. The PROXY protocol dictates the layer 3/4 addresses of the incoming connection to be used everywhere an address is used, with the only exception of "tcp-request connection" rules which will only see the real connection address. Logs will reflect the addresses indicated in the protocol, unless it is violated, in which case the real address will still be used. This keyword combined with support from external components can be used as an efficient and reliable alternative to the X-Forwarded-For mechanism which is not always reliable and not even always usable. See also "tcp-request connection expect-proxy" for a finer-grained setting of which client is allowed to use the protocol. **`allow-0rtt`** ```haproxy allow-0rtt ``` Allow receiving early data when using TLSv1.3. This is disabled by default, due to security considerations. Because it is vulnerable to replay attacks, you should only allow if for requests that are safe to replay, i.e. requests that are idempotent. You can use the "wait-for-handshake" action for any request that wouldn't be safe with early data. With QUIC, 0rtt is supported with QuicTLS, OpenSSL \>= 3.5.2 and AWS-LC. With TCP/TLS, 0rtt is only supported with OpenSSL, and requires that the client sends an ALPN, otherwise the early data won't be considered before the handshake happens. **`alpn `** ```haproxy alpn ``` This enables the TLS ALPN extension and advertises the specified protocol list as supported on top of ALPN. The protocol list consists in a comma-delimited list of protocol names, for instance: "http/1.1,http/1.0" (without quotes). This requires that the SSL library is built with support for TLS extensions enabled (check with haproxy -vv). The ALPN extension replaces the initial NPN extension. At the protocol layer, ALPN is required to enable HTTP/2 on an HTTPS frontend and HTTP/3 on a QUIC frontend. However, when such frontends have none of "npn", "alpn" and "no-alpn" set, a default value of "h2,http/1.1" will be used for a regular HTTPS frontend, and "h3" for a QUIC frontend. Versions of OpenSSL prior to 1.0.2 didn't support ALPN and only supposed the now obsolete NPN extension. At the time of writing this, most browsers still support both ALPN and NPN for HTTP/2 so a fallback to NPN may still work for a while. But ALPN must be used whenever possible. Protocols not advertised are not negotiated. For example it is possible to only accept HTTP/2 connections with this: ```text bind:443 ssl crt pub.pem alpn h2 # explicitly disable HTTP/1.1 ``` QUIC supports only h3 and hq-interop as ALPN. h3 is for HTTP/3 and hq-interop is used for http/0.9 and QUIC interop runner (see ). Each "alpn" statement will replace a previous one. In order to remove them, use "no-alpn". Note that some old browsers such as Firefox 88 used to experience issues with WebSocket over H2, and in case such a setup is encountered, it may be needed to either explicitly disable HTTP/2 in the "alpn" string by forcing it to "http/1.1" or "no-alpn", or to enable "h2-workaround-bogus-websocket-clients" globally. **`backlog `** ```haproxy backlog ``` Sets the socket's backlog to this value. If unspecified or 0, the frontend's backlog is used instead, which generally defaults to the maxconn value. **`ca-file `** ```haproxy ca-file ``` This setting is only available when support for OpenSSL was built in. It designates a PEM file from which to load CA certificates used to verify client's certificate. It is possible to load a directory containing multiple CAs, in this case HAProxy will try to load every ".pem", ".crt", ".cer", and .crl" available in the directory, files starting with a dot are ignored. Warning: The "@system-ca" parameter could be used in place of the cafile in order to use the trusted CAs of your system, like its done with the server directive. But you mustn't use it unless you know what you are doing. Configuring it this way basically mean that the bind will accept any client certificate generated from one of the CA present on your system, which is extremely insecure. **`ca-ignore-err [all|,...]`** ```haproxy ca-ignore-err [all|,...] ``` This setting is only available when support for OpenSSL was built in. Sets a comma separated list of errorIDs to ignore during verify at depth \> 0. It could be a numerical ID, or the constant name (X509_V_ERR) which is available in the OpenSSL documentation: It is recommended to use the constant name as the numerical value can change in new version of OpenSSL. If set to 'all', all errors are ignored. SSL handshake is not aborted if an error is ignored. **`ca-sign-file `** ```haproxy ca-sign-file ``` This setting is only available when support for OpenSSL was built in. It designates a PEM file containing both the CA certificate and the CA private key used to create and sign server's certificates. This is a mandatory setting when the dynamic generation of certificates is enabled. See 'generate-certificates' for details. **`ca-sign-pass `** ```haproxy ca-sign-pass ``` This setting is only available when support for OpenSSL was built in. It is the CA private key passphrase. This setting is optional and used only when the dynamic generation of certificates is enabled. See 'generate-certificates' for details. **`ca-verify-file `** ```haproxy ca-verify-file ``` This setting designates a PEM file from which to load CA certificates used to verify client's certificate. It designates CA certificates which must not be included in CA names sent in server hello message. Typically, "ca-file" must be defined with intermediate certificates, and "ca-verify-file" with certificates to ending the chain, like root CA. **`cc `** ```haproxy cc ``` This setting is only available on systems which define TCP_CONGESTION, and was validated on Linux and FreeBSD. It takes the name of a TCP congestion control algorithm and configures the listener to use this algorithm on all connections that are accepted from this listener. Typical names include "reno", "cubic" and will depend on the operating system. On some systems, special permissions may be required to configure certain algorithms. On Linux, the list of available algorithms may be found in the sysctl "net.ipv4.tcp_available_congestion_control", and the list of those permitted without privileges is in "net.ipv4.tcp_allowed_congestion_control". In order to access algorithms requiring extra permissions, the "cap_net_admin" capability might be required (see "setcap" in the global section). In case of failure to configure a specific congestion control algorithm, the default one will remain unchanged and a warning will be emitted to report the problem. See also: the "cc" server keyword ([section 5.2](/docs/haproxy/bind-and-server-options/#section-5-2)). Example: ```text frontend public bind:443 cc bbr # use the BBR algorithm for high bandwidths ``` **`ciphers `** ```haproxy ciphers ``` This setting is only available when support for OpenSSL was built in. It sets the string describing the list of cipher algorithms ("cipher suite") that are negotiated during the SSL/TLS handshake up to TLSv1.2. The format of the string is defined in "man 1 ciphers" from OpenSSL man pages. For background information and recommendations see e.g. () and (). For TLSv1.3 cipher configuration, please check the "ciphersuites" keyword. **`ciphersuites `** ```haproxy ciphersuites ``` This setting is only available when support for OpenSSL was built in and OpenSSL 1.1.1 or later was used to build HAProxy. It sets the string describing the list of cipher algorithms ("cipher suite") that are negotiated during the TLSv1.3 handshake. The format of the string is defined in "man 1 ciphers" from OpenSSL man pages under the "ciphersuites" section. For cipher configuration for TLSv1.2 and earlier, please check the "ciphers" keyword. This setting might accept TLSv1.2 ciphersuites however this is an undocumented behavior and not recommended as it could be inconsistent or buggy. The default TLSv1.3 ciphersuites of OpenSSL are: "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256" TLSv1.3 only supports 5 ciphersuites: - TLS_AES_128_GCM_SHA256 - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 - TLS_AES_128_CCM_SHA256 - TLS_AES_128_CCM_8_SHA256 Example: ```text ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256 ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 ``` **`client-sigalgs `** ```haproxy client-sigalgs ``` This setting is only available when support for OpenSSL was built in. It sets the string describing the list of signature algorithms related to client authentication that are negotiated . The format of the string is defined in "man 3 SSL_CTX_set1_client_sigalgs" from the OpenSSL man pages. It is not recommended to use this setting if no specific usecase was identified. **`crl-file `** ```haproxy crl-file ``` This setting is only available when support for OpenSSL was built in. It designates a PEM file from which to load certificate revocation list used to verify client's certificate. You need to provide a certificate revocation list for every certificate of your certificate authority chain. **`crt `** ```haproxy crt ``` This setting is only available when support for OpenSSL was built in. HAProxy uses a cache system, the files are loaded only once in the certificate storage, and each next "crt" keyword will use this cached version. When the certificate was declared in a "crt-store", the certificate storage is populated from there and don't try to load additional files by detecting file extensions. It designates a PEM file containing both the required certificates and any associated private keys. This file can be built by concatenating multiple PEM files into one (e.g. cat cert.pem key.pem \> combined.pem). If your CA requires an intermediate certificate, this can also be concatenated into this file. Intermediate certificate can also be shared in a directory via "issuers-chain-path" directive. If the file does not contain a private key, HAProxy will try to load the key at the same path suffixed by a ".key". If the OpenSSL used supports Diffie-Hellman, parameters present in this file are loaded. If a directory name is used instead of a PEM file, then all files found in that directory will be loaded in alphabetic order unless their name ends with '.key', '.issuer', '.ocsp' or '.sctl' (reserved extensions). Files starting with a dot are also ignored. This directive may be specified multiple times in order to load certificates from multiple files or directories. The certificates will be presented to clients who provide a valid TLS Server Name Indication field matching one of their CN or alt subjects. Wildcards are supported, where a wildcard character '\*' is used instead of the first hostname component (e.g. \*.example.org matches [www.example.org](http://www.example.org) but not [www.sub.example.org](http://www.sub.example.org)). If an empty directory is used, HAProxy will not start unless the "strict-sni" keyword is used. If no SNI is provided by the client or if the SSL library does not support TLS extensions, or if the client provides an SNI hostname which does not match any certificate, then the first loaded certificate will be presented. This means that when loading certificates from a directory, it is highly recommended to load the default one first as a file or to ensure that it will always be the first one in the directory. In order to chose multiple default certificates (1 rsa and 1 ecdsa), there are 3 options: - A multi-cert bundle can be configured as the first certificate (`crt foobar.pem` in the configuration where the existing files are `foobar.pem.ecdsa` and `foobar.pem.rsa`. - Or a '\*' filter for each certificate in a crt-list line. - The 'default-crt' keyword can be used. Note that the same cert may be loaded multiple times without side effects. Some CAs (such as GoDaddy) offer a drop down list of server types that do not include HAProxy when obtaining a certificate. If this happens be sure to choose a web server that the CA believes requires an intermediate CA (for GoDaddy, selection Apache Tomcat will get the correct bundle, but many others, e.g. nginx, result in a wrong bundle that will not work for some clients). For each PEM file, HAProxy checks for the presence of file at the same path suffixed by ".ocsp". If such file is found, support for the TLS Certificate Status Request extension (also known as "OCSP stapling") is automatically enabled. The content of this file is optional. If not empty, it must contain a valid OCSP Response in DER format. In order to be valid an OCSP Response must comply with the following rules: it has to indicate a good status, it has to be a single response for the certificate of the PEM file, and it has to be valid at the moment of addition. If these rules are not respected the OCSP Response is ignored and a warning is emitted. In order to identify which certificate an OCSP Response applies to, the issuer's certificate is necessary. If the issuer's certificate is not found in the PEM file, it will be loaded from a file at the same path as the PEM file suffixed by ".issuer" if it exists otherwise it will fail with an error. For each PEM file, HAProxy also checks for the presence of file at the same path suffixed by ".sctl". If such file is found, support for Certificate Transparency (RFC6962) TLS extension is enabled. The file must contain a valid Signed Certificate Timestamp List, as described in RFC. File is parsed to check basic syntax, but no signatures are verified. There are cases where it is desirable to support multiple key types, e.g. RSA and ECDSA in the cipher suites offered to the clients. This allows clients that support EC certificates to be able to use EC ciphers, while simultaneously supporting older, RSA only clients. To achieve this, OpenSSL 1.1.1 is required, you can configure this behavior by providing one crt entry per certificate type, or by configuring a "cert bundle" like it was required before HAProxy 1.8. See "ssl-load-extra-files". **`crt-ignore-err `** ```haproxy crt-ignore-err ``` This setting is only available when support for OpenSSL was built in. Sets a comma separated list of errorIDs to ignore during verify at depth == 0. It could be a numerical ID, or the constant name (X509_V_ERR) which is available in the OpenSSL documentation: It is recommended to use the constant name as the numerical value can change in new version of OpenSSL. If set to 'all', all errors are ignored. SSL handshake is not aborted if an error is ignored. **`crt-list `** ```haproxy crt-list ``` This setting is only available when support for OpenSSL was built in. It designates a list of PEM file with an optional ssl configuration and a SNI filter per certificate, with the following format for each line: ```text [\[ ...\]] [[!] ...] ``` Empty lines as well as lines beginning with a hash ('#') will be ignored. The crt-list can be manipulated dynamically over the stats socket. (See "add ssl crt-list", "del ssl crt-list", "show ssl crt-list" in the management guide). crt-list are usually dedicated files, however a directory loaded with the "crt" directive is represented internally as a crt-list. The "ssl-f-use" directive in a frontend also declares a crt-list linked to this frontend. crtfile: ```text This is the filename of the certificate, or an identifier if it was declared elsewhere (over the CLI or in a crt-store with an alias for example). It is possible to use the same on multiple lines with different options and filters. Multi-cert bundling (see "ssl-load-extra-files") is supported in a crt-list, as long as only the base name is given in . HAProxy will duplicate the crt-list line internally, adding an algorithm extension (.rsa, .ecdsa, .dsa) when loading the file. ``` sslbindconf: ```text supports the following keywords from the bind line (see Section 5.1. Bind options): - allow-0rtt - alpn - ca-file - ca-verify-file - ciphers - ciphersuites - client-sigalgs - crl-file - curves - ecdhe - no-alpn - no-ca-names - npn - sigalgs - ssl-min-ver - ssl-max-ver - verify also supports the following keywords from the crt-store load keyword (see Section 12.7.1. Load options): - crt - key - ocsp - issuer - sctl - ocsp-update Parameters from the bind line are inherited in , if none were specified, the default options are inherited, the parameters specified in overwrite those inherited settings. ``` snifilter: ```text When the parameter is used on a crt-list line, the CN and SAN are not used anymore to select the certificate on this line during the handshake but the is used instead. is a list of entries separated by spaces. This list can contain domains, or wildcards. The wildcards are in wildcard DNS format, using a single asterisk as the first character of the entry. It is possible to exclude a domain from a wildcard with a negative filter by specifying a '!' in front of a single domain. Having a ! in front of a * is ignored. Having negative filters without a wildcard on the same line is not supported as well. The special entry '*' is used to specify default certificates, which are used as fallback when no domain matched. The certificates will be presented to clients who provide a valid TLS Server Name Indication field matching one of the SNI filters, or the CN and SAN of a . The matching algorithm first looks for a positive domain entry in the list, if not found it will try to look for a wildcard in the list. If a wildcard match, haproxy checks for a negative filter from the same line and unmatch if necessary. In case of multiple key algorithms (RSA,ECDSA,DSA), HAProxy will try to match one certificate per type and chose the right one depending on what is supported by the client. If no SNI is presented by the client or if no certificate matched, this will fallback to one of the default certificate. To disable the default certificate fallback, the 'strict-sni' option may be used. When multiple default certificates are defined, HAProxy is able to chose the right ECDSA or RSA one depending on what the client supports. The first declared certificate of a bind line is used as a default certificate, either from crt or crt-list option. It is also possible to declare a '*' filter, which will add this certificate to the list of default certificates. To clarify the configuration, the default certificates could be explicit (with a '*' filter) at the beginning of the list, so an implicit default is not added before. Due to multi-cert bundles being duplicated for each algorithm in the crt-list, only one algorithm will occupy the first line in the crt-list and be considered as default. Either specify the entire bundle as default by declaring '*' as the filter or setting it on the bind line. The "show ssl sni" command on the stats socket could be used to debug your configuration. (See "show ssl sni" in the management guide) ``` Example: ```shell # comment default.pem.rsa * default.pem.ecdsa * cert2.pem [alpn h2,http/1.1] certW.pem *.domain.tld !secure.domain.tld certS.pem [curves X25519:P-256 ciphers ECDHE-ECDSA-AES256-GCM-SHA384] secure.domain.tld foo.crt [key bar.pem ocsp foo.ocsp ocsp-update on] foo.bar.com ``` **`default-crt `** ```haproxy default-crt ``` This option does the same as the "crt" option, with the difference that this certificate will be used as a default one as well. It is possible to add multiple default certificates to have an ECDSA and an RSA one, having more is not really useful. This option does not disable implicit default certificates, if a 'crt' certificate is declared first before any 'default-crt' or other 'crt' it will still be used as a default certificate. A default certificate is used when no "strict-sni" option is used on the bind line. A default certificate is provided when the servername extension was not used by the client, or when the servername does not match any configured certificate. Example: ```shell # this bind line has 2 default certificates bind *:443 default-crt foobar.pem.rsa default-crt foobar.pem.ecdsa crt website.pem.rsa # this bind line has 3 default certificates bind *:443 crt website.pem.rsa default-crt foobar.pem.rsa default-crt foobar.pem.ecdsa ``` See also the "crt" keyword. **`curves `** ```haproxy curves ``` This setting is only available when support for OpenSSL was built in. It sets the string describing the list of elliptic curves algorithms ("curve suite") that are negotiated during the SSL/TLS handshake with ECDHE. The format of the string is a colon-delimited list of curve name. Example: "X25519:P-256" (without quote) When "curves" is set, "ecdhe" parameter is ignored. **`defer-accept`** ```haproxy defer-accept ``` Is an optional keyword which is supported only on certain Linux kernels. It states that a connection will only be accepted once some data arrive on it, or at worst after the first retransmit. This should be used only on protocols for which the client talks first (e.g. HTTP). It can slightly improve performance by ensuring that most of the request is already available when the connection is accepted. On the other hand, it will not be able to detect connections which don't talk. It is important to note that this option is broken in all kernels up to 2.6.31, as the connection is never accepted until the client talks. This can cause issues with front firewalls which would see an established connection while the proxy will only see it in SYN_RECV. This option is only supported on TCPv4/TCPv6 sockets and ignored by other ones. **`ecdhe `** ```haproxy ecdhe ``` This setting is only available when support for OpenSSL was built in. It sets the named curve (RFC 4492) used to generate ECDH ephemeral keys. By default, used named curve is prime256v1. **`ech [ EXPERIMENTAL ]`** ```haproxy ech [ EXPERIMENTAL ] ``` Apply all ECH keys from `` to the bind line. The files must have the .ech extension and must use the PEM file format for ECH. ( ) This keyword enables ECH in shared-mode. with HAProxy acting as both the TLS endpoint and the ECH endpoint. See This is an experimental feature, which requires the "expose-experimental-directives" option in the global section. It also necessitates an OpenSSL version that supports ECH ( ), and HAProxy must be compiled with USE_ECH=1. The ECH API of AWS-LC is not supported. Example: ```shell $ openssl ech -public_name foobar.com -out /etc/haproxy/echkeydir/foobar.com.ech $ cat haproxy.cfg [...] bind:443 ech /etc/haproxy/echkeydir/ ssl crt example.com.pem // Use the ECHCONFIG section of your .ech file $ openssl s_client -tls1_3 -connect example.com:443 -servername example.com \ -ech_config_list AD3+DQA5cwAgACB6ybtgtFYoM5r8nJSotus4c7K0EG..9vYmFyLmNvbQAA ``` **`expose-fd listeners`** ```haproxy expose-fd listeners ``` This option is only usable with the stats socket. It gives your stats socket the capability to pass listeners FD to another HAProxy process. In master-worker mode, this is not required anymore, the listeners will be passed using the internal socketpairs between the master and the workers. See also "-x" in the management guide. **`force-sslv3`** ```haproxy force-sslv3 ``` This option enforces use of SSLv3 only on SSL connections instantiated from this listener. SSLv3 is generally less expensive than the TLS counterparts for high connection rates. This option is also available on global statement "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver". **`force-tlsv10`** ```haproxy force-tlsv10 ``` This option enforces use of TLSv1.0 only on SSL connections instantiated from this listener. This option is also available on global statement "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver". **`force-tlsv11`** ```haproxy force-tlsv11 ``` This option enforces use of TLSv1.1 only on SSL connections instantiated from this listener. This option is also available on global statement "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver". **`force-tlsv12`** ```haproxy force-tlsv12 ``` This option enforces use of TLSv1.2 only on SSL connections instantiated from this listener. This option is also available on global statement "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver". **`force-tlsv13`** ```haproxy force-tlsv13 ``` This option enforces use of TLSv1.3 only on SSL connections instantiated from this listener. This option is also available on global statement "ssl-default-bind-options". See also "ssl-min-ver" and "ssl-max-ver". **`generate-certificates`** ```haproxy generate-certificates ``` This setting is only available when support for OpenSSL was built in. It enables the dynamic SSL certificates generation. A CA certificate and its private key are necessary (see 'ca-sign-file'). When HAProxy is configured as a transparent forward proxy, SSL requests generate errors because of a common name mismatch on the certificate presented to the client. With this option enabled, HAProxy will try to forge a certificate using the SNI hostname indicated by the client. This is done only if no certificate matches the SNI hostname (see 'crt-list'). In the event of a certificate generation error, the connection will fall back on the default certificate. When using 'strict-sni', the default certificate will not be used and the connection will result in a handshake failure. It can also be used when HAProxy is configured as a reverse proxy to ease the deployment of an architecture with many backends. Creating a SSL certificate is an expensive operation, so a LRU cache is used to store forged certificates (see 'tune.ssl.ssl-ctx-cache-size'). It increases the HAProxy's memory footprint to reduce latency when the same certificate is used many times. **`gid `** ```haproxy gid ``` Sets the group of the UNIX sockets to the designated system gid. It can also be set by default in the global section's "unix-bind" statement. Note that some platforms simply ignore this. This setting is equivalent to the "group" setting except that the group ID is used instead of its name. This setting is ignored by non UNIX sockets. **`group `** ```haproxy group ``` Sets the group of the UNIX sockets to the designated system group. It can also be set by default in the global section's "unix-bind" statement. Note that some platforms simply ignore this. This setting is equivalent to the "gid" setting except that the group name is used instead of its gid. This setting is ignored by non UNIX sockets. **`guid-prefix `** ```haproxy guid-prefix ``` Generate case-sensitive global unique IDs for each listening sockets allocated on this bind line. Prefix will be concatenated to listeners position index on the current bind line, with character '-' as separator. See "guid" proxy keyword description for more information on its format. See also "shm-stats-file". **`id `** ```haproxy id ``` Fixes the socket ID. By default, socket IDs are automatically assigned, but sometimes it is more convenient to fix them to ease monitoring. This value must be strictly positive and unique within the listener/frontend. This option can only be used when defining only a single socket. **`idle-ping `** ```haproxy idle-ping ``` May be used in the following contexts: tcp, http, log Define an interval for periodic liveliness on idle frontend connections. If the peer is unable to respond before the next scheduled test, the connection is closed. Else, the client timeout is refreshed and the connection is kept. Note that http-request/http-keep-alive timers run in parallel and are not refreshed by idle-ping. This feature relies on specific underlying protocol support. For now, only H2 mux implements it. Idle-ping is simply ignored by other protocols. This option is particularly useful when using reverse HTTP. Setting it on the bind line is useful for the peer which is responsible to actively initiate connections and will then receive incoming traffic through them. **`interface `** ```haproxy interface ``` Restricts the socket to a specific interface. When specified, only packets received from that particular interface are processed by the socket. This is currently only supported on Linux. The interface must be a primary system interface, not an aliased interface. It is also possible to bind multiple frontends to the same address if they are bound to different interfaces. Note that binding to a network interface requires root privileges. This parameter is only compatible with TCPv4/TCPv6 sockets. When specified, return traffic uses the same interface as inbound traffic, and its associated routing table, even if there are explicit routes through different interfaces configured. This can prove useful to address asymmetric routing issues when the same client IP addresses need to be able to reach frontends hosted on different interfaces. **`ktls [ EXPERIMENTAL ]`** ```haproxy ktls [ EXPERIMENTAL ] ``` Enables or disables ktls for those sockets. If enabled, kTLS will be used if the kernel supports it and the cipher is compatible. This is only available on Linux kernel 4.17 and above. Please note that some network drivers and/or TLS stacks might restrict kTLS usage to TLS v1.2 only. See also "force-tlsv12". **`label