5.1. Bind options
- The "bind
" keyword supports a certain number of settings which are all passed
- This keyword is available in sections :
- Peers
- Alphabetically sorted keywords reference
- 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.
- 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.
- 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 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.
- 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. ALPN is required to enable HTTP/2 on an HTTP 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. If both HTTP/2 and HTTP/1.1
- are expected to be supported, both versions can be advertised, in order of
- preference, like below :
- bind :443 ssl crt pub.pem alpn h2,http/1.1
- 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.
- 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:
- 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.
- 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.
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.
- If set to 'all', all errors are ignored. SSL handshake is not aborted if an
- error is ignored.
- 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.
- 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.
- 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.
- (https://wiki.mozilla.org/Security/Server_Side_TLS) and
- (https://mozilla.github.io/server-side-tls/ssl-config-generator/). For TLSv1.3
- cipher configuration, please check the "ciphersuites
" keyword.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- 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
- This keyword is available in sections :
- Bind options
- Server and default-server options
- for TLSv1.2 and earlier, please check the "ciphers
" keyword.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- 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.
- This setting is only available when support for OpenSSL was built in. 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.
- 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
- '.issuer', '.ocsp' or '.sctl' (reserved extensions). 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 but not www.sub.example.org).
- 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.
- 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.
- In order to provide this functionality, multiple PEM files, each with a
- different key type, are required. To associate these PEM files into a
- "cert bundle" that is recognized by haproxy, they must be named in the
- following way: All PEM files that are to be bundled must have the same base
- name, with a suffix indicating the key type. Currently, three suffixes are
- supported: rsa, dsa and ecdsa. For example, if www.example.com has two PEM
- files, an RSA file and an ECDSA file, they must be named: "example.pem.rsa"
- and "example.pem.ecdsa". The first part of the filename is arbitrary; only the
- suffix matters. To load this bundle into haproxy, specify the base name only:
Example :
bind :8443 ssl crt example.pem
- Note that the suffix is not given to haproxy; this tells haproxy to look for
- a cert bundle.
- HAProxy will load all PEM files in the bundle at the same time to try to
- support multiple key types. PEM files are combined based on Common Name
- (CN) and Subject Alternative Name (SAN) to support SNI lookups. This means
- that even if you give haproxy a cert bundle, if there are no shared CN/SAN
- entries in the certificates in that bundle, haproxy will not be able to
- provide multi-cert support.
- Assuming bundle in the example above contained the following:
Filename | CN | SAN |
---|---|---|
example.pem.rsa | www.example.com | rsa.example.com |
example.pem.ecdsa | www.example.com | ecdsa.example.com |
- Users connecting with an SNI of "www.example.com" will be able
- to use both RSA and ECDSA cipher suites. Users connecting with an SNI of
- "rsa.example.com" will only be able to use RSA cipher suites, and users
- connecting with "ecdsa.example.com" will only be able to use ECDSA cipher
- suites. With BoringSSL and Openssl >= 1.1.1 multi-cert is natively supported,
- no need to bundle certificates. ECDSA certificate will be preferred if client
- support it.
- If a directory name is given as the <cert> argument, haproxy will
- automatically search and load bundled files in that directory.
- OSCP files (.ocsp) and issuer files (.issuer) are supported with multi-cert
- bundling. Each certificate can have its own .ocsp and .issuer file. At this
- time, sctl is not supported in multi-certificate bundling.
- 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. If
- set to 'all', all errors are ignored. SSL handshake is not aborted if an error
- is ignored.
- 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 :
- <crtfile> [\[<sslbindconf> ...\]] [[!]<snifilter> ...]
- sslbindconf support "npn
", "alpn
- This keyword is available in sections :
- Bind options
- Server and default-server options
", "verify
- This keyword is available in sections :
- Bind options
- Server and default-server options
", "ca-file
- This keyword is available in sections :
- Bind options
- Server and default-server options
", "no-ca-names",
- This keyword is available in sections :
- Bind options
- Server and default-server options
- crl-file", "ecdhe", "curves", "ciphers
" configuration. With BoringSSL
- This keyword is available in sections :
- Bind options
- Server and default-server options
- and Openssl >= 1.1.1 "ssl-min-ver
" and "ssl-max-ver
- This keyword is available in sections :
- Bind options
- Server and default-server options
" are also supported.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- It override the configuration set in bind line for the certificate.
- Wildcards are supported in the SNI filter. Negative filter are also supported,
- only useful in combination with a wildcard filter to exclude a particular SNI.
- The certificates will be presented to clients who provide a valid TLS Server
- Name Indication field matching one of the SNI filters. If no SNI filter is
- specified, the CN and alt subjects are used. This directive may be specified
- multiple times. See the "crt
" option for more information. The default
- This keyword is available in sections :
- Bind options
- Server and default-server options
- certificate is still needed to meet OpenSSL expectations. If it is not used,
- the 'strict-sni' option may be used.
- Multi-cert bundling (see "crt
") is supported with crt-list, as long as only
- This keyword is available in sections :
- Bind options
- Server and default-server options
- the base name is given in the crt-list. SNI filter will do the same work on
- all bundled certificates. With BoringSSL and Openssl >= 1.1.1 multi-cert is
- natively supported, avoid multi-cert bundling. RSA and ECDSA certificates can
- be declared in a row, and set different ssl and filter parameter.
- crt-list file example:
- cert1.pem
- 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
- 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.
- This option is only usable with the stats socket. It gives your stats socket
- the capability to pass listeners FD to another HAProxy process.
- During a reload with the master-worker mode, the process is automatically
- reexecuted adding -x and one of the stats socket with this option.
- See also "-x" in the management guide.
- 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
- This keyword is available in sections :
- Bind options
- Server and default-server options
".
- This keyword is available in sections :
- Bind options
- Server and default-server options
- 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
- This keyword is available in sections :
- Bind options
- Server and default-server options
".
- This keyword is available in sections :
- Bind options
- Server and default-server options
- 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
- This keyword is available in sections :
- Bind options
- Server and default-server options
".
- This keyword is available in sections :
- Bind options
- Server and default-server options
- 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
- This keyword is available in sections :
- Bind options
- Server and default-server options
".
- This keyword is available in sections :
- Bind options
- Server and default-server options
- 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
- This keyword is available in sections :
- Bind options
- Server and default-server options
".
- This keyword is available in sections :
- Bind options
- Server and default-server options
- 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'). If an error occurs, the default certificate is
- used, else the 'strict-sni' option is set.
- 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.
- 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
"
- This keyword is available in sections :
- Process management and security
- Userlists
- Bind options
- setting except that the group ID is used instead of its name. This setting is
- ignored by non UNIX sockets.
- 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
- This keyword is available in sections :
- Process management and security
- Bind options
- setting is ignored by non UNIX sockets.
- 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.
- 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.
- This setting is used with the stats sockets only to restrict the nature of
- the commands that can be issued on the socket. It is ignored by other
- sockets. <level> can be one of :
- - "user
" is the least privileged level; only non-sensitive stats can be
- This keyword is available in sections :
- Process management and security
- Userlists
- Bind options
- read, and no change is allowed. It would make sense on systems where it
- is not easy to restrict access to the socket.
- - "operator" is the default level and fits most common uses. All data can
- be read, and only non-sensitive changes are permitted (e.g. clear max
- counters).
- - "admin" should be used with care, as everything is permitted (e.g. clear
- all counters).
- This setting is used with the stats sockets only to configure severity
- level output prepended to informational feedback messages. Severity
- level of messages can range between 0 and 7, conforming to syslog
- rfc5424. Valid and successful socket commands requesting data
- (i.e. "show map", "get acl foo" etc.) will never have a severity level
- prepended. It is ignored by other sockets. <format> can be one of :
- - "none" (default) no severity level is prepended to feedback messages.
- - "number" severity level is prepended as a number.
- - "string" severity level is prepended as a string following the
- rfc5424 convention.
- Limits the sockets to this number of concurrent connections. Extraneous
- connections will remain in the system's backlog until a connection is
- released. If unspecified, the limit will be the same as the frontend's
- maxconn. Note that in case of port ranges or multiple addresses, the same
- value will be applied to each socket. This setting enables different
- limitations on expensive sockets, for instance SSL entries which may easily
- eat all memory.
- Sets the octal mode used to define access permissions on the UNIX socket. 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 ignored by non
- UNIX sockets.
- Sets the TCP Maximum Segment Size (MSS) value to be advertised on incoming
- connections. This can be used to force a lower MSS for certain specific
- ports, for instance for connections passing through a VPN. Note that this
- relies on a kernel feature which is theoretically supported under Linux but
- was buggy in all versions prior to 2.6.28. It may or may not work on other
- operating systems. It may also not change the advertised value but change the
- effective size of outgoing segments. The commonly advertised value for TCPv4
- over Ethernet networks is 1460 = 1500(MTU) - 40(IP+TCP). If this value is
- positive, it will be used as the advertised MSS. If it is negative, it will
- indicate by how much to reduce the incoming connection's advertised MSS for
- outgoing segments. This parameter is only compatible with TCP v4/v6 sockets.
- Sets an optional name for these sockets, which will be reported on the stats
- page.
- On Linux, it is possible to specify which network namespace a socket will
- belong to. This directive makes it possible to explicitly bind a listener to
- a namespace different from the default one. Please refer to your operating
- system's documentation to find more details about network namespaces.
- Sets the 'niceness' of connections initiated from the socket. Value must be
- in the range -1024..1024 inclusive, and defaults to zero. Positive values
- means that such connections are more friendly to others and easily offer
- their place in the scheduler. On the opposite, negative values mean that
- connections want to run with a higher priority than others. The difference
- only happens under high loads when the system is close to saturation.
- Negative values are appropriate for low-latency or administration services,
- and high values are generally recommended for CPU intensive tasks such as SSL
- processing or bulk transfers which are less sensible to latency. For example,
- it may make sense to use a positive value for an SMTP socket and a negative
- one for an RDP socket.
- This setting is only available when support for OpenSSL was built in. It
- prevents from send CA names in server hello message when ca-file is used.
- This setting is only available when support for OpenSSL was built in. It
- disables support for SSLv3 on any sockets instantiated from the listener when
- SSL is supported. Note that SSLv2 is forced disabled in the code and cannot
- be enabled using any configuration option. This option is also available on
- global statement "ssl-default-bind-options". Use "ssl-min-ver
" and
- This keyword is available in sections :
- Bind options
- Server and default-server options
- "ssl-max-ver
" instead.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- This setting is only available when support for OpenSSL was built in. It
- disables the stateless session resumption (RFC 5077 TLS Ticket
- extension) and force to use stateful session resumption. Stateless
- session resumption is more expensive in CPU usage. This option is also
- available on global statement "ssl-default-bind-options".
- The TLS ticket mechanism is only used up to TLS 1.2.
- Forward Secrecy is compromised with TLS tickets, unless ticket keys
- are periodically rotated (via reload or by using "tls-ticket-keys").
- This setting is only available when support for OpenSSL was built in. It
- disables support for TLSv1.0 on any sockets instantiated from the listener
- when SSL is supported. Note that SSLv2 is forced disabled in the code and
- cannot be enabled using any configuration option. This option is also
- available on global statement "ssl-default-bind-options". Use "ssl-min-ver
"
- This keyword is available in sections :
- Bind options
- Server and default-server options
- and "ssl-max-ver
" instead.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- This setting is only available when support for OpenSSL was built in. It
- disables support for TLSv1.1 on any sockets instantiated from the listener
- when SSL is supported. Note that SSLv2 is forced disabled in the code and
- cannot be enabled using any configuration option. This option is also
- available on global statement "ssl-default-bind-options". Use "ssl-min-ver
"
- This keyword is available in sections :
- Bind options
- Server and default-server options
- and "ssl-max-ver
" instead.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- This setting is only available when support for OpenSSL was built in. It
- disables support for TLSv1.2 on any sockets instantiated from the listener
- when SSL is supported. Note that SSLv2 is forced disabled in the code and
- cannot be enabled using any configuration option. This option is also
- available on global statement "ssl-default-bind-options". Use "ssl-min-ver
"
- This keyword is available in sections :
- Bind options
- Server and default-server options
- and "ssl-max-ver
" instead.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- This setting is only available when support for OpenSSL was built in. It
- disables support for TLSv1.3 on any sockets instantiated from the listener
- when SSL is supported. Note that SSLv2 is forced disabled in the code and
- cannot be enabled using any configuration option. This option is also
- available on global statement "ssl-default-bind-options". Use "ssl-min-ver
"
- This keyword is available in sections :
- Bind options
- Server and default-server options
- and "ssl-max-ver
" instead.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- This enables the NPN TLS extension and advertises the specified protocol list
- as supported on top of NPN. 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). Note that the NPN extension has been
- replaced with the ALPN extension (see the "alpn
" keyword), though this one is
- This keyword is available in sections :
- Bind options
- Server and default-server options
- only available starting with OpenSSL 1.0.2. If HTTP/2 is desired on an older
- version of OpenSSL, NPN might still be used as most clients still support it
- at the time of writing this. It is possible to enable both NPN and ALPN
- though it probably doesn't make any sense out of testing.
- Use the client's preference when selecting the cipher suite, by default
- the server's preference is enforced. This option is also available on
- global statement "ssl-default-bind-options".
- Note that with OpenSSL >= 1.1.1 ChaCha20-Poly1305 is reprioritized anyway
- (without setting this option), if a ChaCha20-Poly1305 cipher is at the top of
- the client cipher list.
process
- This restricts the list of processes or threads on which this listener is
- allowed to run. It does not enforce any process but eliminates those which do
- not match. If the frontend uses a "bind-process" setting, the intersection
- between the two is applied. If in the end the listener is not allowed to run
- on any remaining process, a warning is emitted, and the listener will either
- run on the first process of the listener if a single process was specified,
- or on all of its processes if multiple processes were specified. If a thread
- set is specified, it limits the threads allowed to process incoming
- connections for this listener, for the the process set. If multiple processes
- and threads are configured, a warning is emitted, as it either results from a
- configuration error or a misunderstanding of these models. For the unlikely
- case where several ranges are needed, this directive may be repeated.
- <process-set> and <thread-set> must use the format
- all | odd | even | number[-[number]]
- Ranges can be partially defined. The higher bound can be omitted. In such
- case, it is replaced by the corresponding maximum value. The main purpose of
- this directive is to be used with the stats sockets and have one different
- socket per process. The second purpose is to have multiple bind lines sharing
- the same IP:port but not the same process in a listener, so that the system
- can distribute the incoming connections into multiple queues and allow a
- smoother inter-process load balancing. Currently Linux 3.9 and above is known
- for supporting this. See also "bind-process" and "nbproc
".
- This keyword is available in sections :
- Process management and security
- Fetching samples from internal states
- Forces the multiplexer's protocol to use for the incoming connections. It
- must be compatible with the mode of the frontend (TCP or HTTP). It must also
- be usable on the frontend side. The list of available protocols is reported
- in haproxy -vv.
- Idea behind this optipon is to bypass the selection of the best multiplexer's
- protocol for all connections instantiated from this listening socket. For
- instance, it is possible to force the http/2 on clear TCP by specifying "proto
- h2" on the bind line.
- This setting is only available when support for OpenSSL was built in. It
- enables SSL deciphering on connections instantiated from this listener. A
- certificate is necessary (see "crt
" above). All contents in the buffers will
- This keyword is available in sections :
- Bind options
- Server and default-server options
- appear in clear text, so that ACLs and HTTP processing will only have access
- to deciphered contents. SSLv3 is disabled per default, use "ssl-min-ver SSLv3"
- to enable it.
ssl-max-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
- This option enforces use of <version> or lower on SSL connections instantiated
- from this listener. This option is also available on global statement
- "ssl-default-bind-options". See also "ssl-min-ver
".
- This keyword is available in sections :
- Bind options
- Server and default-server options
ssl-min-ver [ SSLv3 | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 ]
- This option enforces use of <version> or upper on SSL connections instantiated
- from this listener. This option is also available on global statement
- "ssl-default-bind-options". See also "ssl-max-ver
".
- This keyword is available in sections :
- Bind options
- Server and default-server options
- This setting is only available when support for OpenSSL was built in. The
- SSL/TLS negotiation is allow only if the client provided an SNI which match
- a certificate. The default certificate is not used.
- See the "crt
" option for more information.
- This keyword is available in sections :
- Bind options
- Server and default-server options
- Sets the TCP User Timeout for all incoming connections instantiated from this
- listening socket. This option is available on Linux since version 2.6.37. It
- allows haproxy to configure a timeout for sockets which contain data not
- receiving an acknowledgment for the configured delay. This is especially
- useful on long-lived connections experiencing long idle periods such as
- remote terminals or database connection pools, where the client and server
- timeouts must remain high to allow a long period of idle, but where it is
- important to detect that the client has disappeared in order to release all
- resources associated with its connection (and the server's session). The
- argument is a delay expressed in milliseconds by default. This only works
- for regular TCP connections, and is ignored for other protocols.
- Is an optional keyword which is supported only on Linux kernels >= 3.7. It
- enables TCP Fast Open on the listening socket, which means that clients which
- support this feature will be able to send a request and receive a response
- during the 3-way handshake starting from second connection, thus saving one
- round-trip after the first connection. This only makes sense with protocols
- that use high connection rates and where each round trip matters. This can
- possibly cause issues with many firewalls which do not accept data on SYN
- packets, so this option should only be enabled once well tested. This option
- is only supported on TCPv4/TCPv6 sockets and ignored by other ones. You may
- need to build HAProxy with USE_TFO=1 if your libc doesn't define
- TCP_FASTOPEN.
- Sets the TLS ticket keys file to load the keys from. The keys need to be 48
- or 80 bytes long, depending if aes128 or aes256 is used, encoded with base64
- with one line per key (ex. openssl rand 80 | openssl base64 -A | xargs echo).
- The first key determines the key length used for next keys: you can't mix
- aes128 and aes256 keys. Number of keys is specified by the TLS_TICKETS_NO
- build option (default 3) and at least as many keys need to be present in
- the file. Last TLS_TICKETS_NO keys will be used for decryption and the
- penultimate one for encryption. This enables easy key rotation by just
- appending new key to the file and reloading the process. Keys must be
- periodically rotated (ex. every 12h) or Perfect Forward Secrecy is
- compromised. It is also a good idea to keep the keys off any permanent
- storage such as hard drives (hint: use tmpfs and don't swap those files).
- Lifetime hint can be changed using tune.ssl.timeout.
- Is an optional keyword which is supported only on certain Linux kernels. It
- indicates that the addresses will be bound even if they do not belong to the
- local machine, and that packets targeting any of these addresses will be
- intercepted just as if the addresses were locally configured. This normally
- requires that IP forwarding is enabled. Caution! do not use this with the
- default address '*', as it would redirect any traffic for the specified port.
- This keyword is available only when HAProxy is built with USE_LINUX_TPROXY=1.
- This parameter is only compatible with TCPv4 and TCPv6 sockets, depending on
- kernel version. Some distribution kernels include backports of the feature,
- so check for support with your vendor.
- Is an optional keyword which is supported only on most recent systems
- including Linux kernels >= 2.4.21. It is used to bind a socket to both IPv4
- and IPv6 when it uses the default address. Doing so is sometimes necessary
- on systems which bind to IPv6 only by default. It has no effect on non-IPv6
- sockets, and is overridden by the "v6only" option.
- Is an optional keyword which is supported only on most recent systems
- including Linux kernels >= 2.4.21. It is used to bind a socket to IPv6 only
- when it uses the default address. Doing so is sometimes preferred to doing it
- system-wide as it is per-listener. It has no effect on non-IPv6 sockets and
- has precedence over the "v4v6" option.
- Sets the owner of the UNIX sockets to the designated system uid. 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 "user
"
- This keyword is available in sections :
- Process management and security
- Userlists
- Bind options
- setting except that the user numeric ID is used instead of its name. This
- setting is ignored by non UNIX sockets.
- Sets the owner of the UNIX sockets to the designated system user. 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 "uid
"
- This keyword is available in sections :
- Process management and security
- Bind options
- setting except that the user name is used instead of its uid. This setting is
- ignored by non UNIX sockets.
verify [none|optional|required]
- This setting is only available when support for OpenSSL was built in. If set
- to 'none', client certificate is not requested. This is the default. In other
- cases, a client certificate is requested. If the client does not provide a
- certificate after the request and if 'verify' is set to 'required', then the
- handshake is aborted, while it would have succeeded if set to 'optional'. The
- certificate provided by the client is always verified using CAs from
- 'ca-file' and optional CRLs from 'crl-file'. On verify failure the handshake
- is aborted, regardless of the 'verify' option, unless the error code exactly
- matches one of those listed with 'ca-ignore-err' or 'crt-ignore-err'.