--- title: "5. 绑定与服务器选项" linkTitle: "5. 绑定与服务器选项" weight: 160 description: "监听器、服务器、默认服务器和 DNS 解析选项" icon: fa-solid fa-network-wired module: [HAPROXY] categories: [参考] 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" --- “bind”、“server” 和 “default-server” 关键字支持多种设置,具体取决于构建选项以及 HAProxy 所基于的系统。这些设置通常由一个单词组成,有时后接一个值,与 “bind” 或 “server” 语句位于同一行。所有这些选项均在本节中描述。 ## 5.1. 绑定选项 {#section-5-1} "bind" 关键字支持若干设置,这些设置均作为参数在同一行中传递。参数的排列顺序无关紧要,只要它们出现在绑定地址之后即可。所有这些参数均为可选。部分参数为单个单词(布尔值),而其他参数则需要在其后提供值。对于后者,值必须紧随参数名称之后提供。 当前支持的设置如下: **`accept-netscaler-cip `** ```haproxy accept-netscaler-cip ``` 强制使用 NetScaler 客户端 IP 插入协议,适用于在同一行中声明的任意 TCP 套接字所接受的连接。NetScaler 客户端 IP 插入协议规定,在任何使用地址的场景中均应采用传入连接的第 3/4 层地址,唯一例外是“tcp-request connection”规则仅能获取真实的连接地址。日志将反映协议中指示的地址,除非协议被违反,此时仍使用真实地址。该关键字结合外部组件支持,可作为 X-Forwarded-For 机制的高效且可靠的替代方案,后者并不总是可靠,甚至在某些情况下不可用。有关更细粒度地设置允许使用该协议的客户端,请参见“tcp-request connection expect-netscaler-cip”。 **`accept-proxy`** ```haproxy accept-proxy ``` 强制在由同一行中声明的任意套接字接收的每个连接上使用 PROXY 协议。支持 PROXY 协议版本 1 和版本 2,并能正确识别。PROXY 协议规定,所有使用地址的场景均应采用协议中指示的第 3/4 层地址,唯一例外是“tcp-request connection”规则仅能获取真实的连接地址。日志将反映协议中指示的地址,除非协议被违反,此时仍使用真实地址。该关键字结合外部组件支持,可作为 X-Forwarded-For 机制的高效且可靠的替代方案,后者并非始终可靠,甚至在某些情况下不可用。有关更细粒度地设置允许使用该协议的客户端,请参见“tcp-request connection expect-proxy”。 **`allow-0rtt`** ```haproxy allow-0rtt ``` 在使用 TLSv1.3 时允许接收早期数据。由于安全考虑,此功能默认已禁用。由于存在重放攻击风险,仅当请求可安全重放时才应启用,即仅限幂等请求。对于不适用于早期数据的请求,可使用“wait-for-handshake”动作。在 QUIC 场景下,0-RTT 支持 QuicTLS、OpenSSL >= 3.5.2 和 AWS-LC。在 TCP/TLS 场景下,0-RTT 仅支持 OpenSSL,且要求客户端发送 ALPN,否则早期数据在握手完成前不会被接受。 **`alpn `** ```haproxy alpn ``` 启用 TLS ALPN 扩展,并在 ALPN 上声明指定的协议列表作为支持的协议。协议列表由逗号分隔的协议名称组成,例如:http/1.1,http/1.0(不带引号)。此功能要求 SSL 库在编译时启用了 TLS 扩展支持(请通过 HAProxy -vv 检查)。ALPN 扩展取代了初始的 NPN 扩展。在协议层,ALPN 是在 HTTPS 前端启用 HTTP/2 以及在 QUIC 前端启用 HTTP/3 所必需的。然而,当此类前端未设置 "npn"、"alpn" 或 "no-alpn" 时,常规 HTTPS 前端将默认使用 "h2,http/1.1",QUIC 前端则默认使用 "h3"。OpenSSL 1.0.2 之前的版本不支持 ALPN,仅支持现已废弃的 NPN 扩展。截至本文撰写时,大多数浏览器仍同时支持 ALPN 和 NPN 以实现 HTTP/2,因此短期内回退至 NPN 仍可能有效。但应尽可能使用 ALPN。未声明的协议不会被协商。例如,仅接受 HTTP/2 连接可配置如下: ```text bind:443 ssl crt pub.pem alpn h2 # explicitly disable HTTP/1.1 ``` QUIC 仅支持 h3 和 hq-interop 作为 ALPN。h3 用于 HTTP/3,hq-interop 用于 HTTP/0.9 和 QUIC 互操作性测试工具(参见 )。每个 "alpn" 语句将替换之前的设置。如需移除这些设置,请使用 "no-alpn"。 请注意,某些旧版浏览器(如 Firefox 88)曾对 H2 上的 WebSocket 存在兼容性问题。若遇到此类配置,可能需要显式地在 "alpn" 字符串中禁用 HTTP/2,将其强制设为 "http/1.1" 或 "no-alpn",或全局启用 "h2-workaround-bogus-websocket-clients"。 **`backlog `** ```haproxy backlog ``` 将套接字的队列长度设置为该值。若未指定或值为 0,则使用前端的队列长度,通常默认为 maxconn 的值。 **`ca-file `** ```haproxy ca-file ``` 此设置仅在编译时启用 OpenSSL 支持时可用。它指定一个 PEM 文件,用于加载用于验证客户端证书的 CA 证书。可加载包含多个 CA 的目录,在此情况下,HAProxy 将尝试加载目录中所有 ".pem"、".crt"、".cer" 和 .crl 文件,以点开头的文件将被忽略。 请注意:可使用 `@system-ca` 参数替代 `cafile`,以使用系统中受信任的 CA,方式与 `server` 指令相同。除非明确了解其安全影响,否则不得使用该参数。以这种方式配置意味着绑定将接受由系统中任意 CA 生成的客户端证书,这极其不安全。 **`ca-ignore-err [all|,...]`** ```haproxy ca-ignore-err [all|,...] ``` 此设置仅在编译时启用了 OpenSSL 支持时可用。设置一个以逗号分隔的错误 ID 列表,用于在验证深度大于 0 时忽略这些错误。错误 ID 可以是数值,也可以是 OpenSSL 文档中提供的常量名(X509_V_ERR): 建议使用常量名,因为数值可能在 OpenSSL 新版本中发生变化。若设置为 'all',则忽略所有错误。忽略错误时不会中止 SSL 握手。 **`ca-sign-file `** ```haproxy ca-sign-file ``` 此设置仅在编译时启用 OpenSSL 支持时可用。它指定一个 PEM 文件,其中包含用于生成和签署服务器证书的 CA 证书及 CA 私钥。当启用证书动态生成时,此项为必填设置。详情请参见 'generate-certificates'。 **`ca-sign-pass `** ```haproxy ca-sign-pass ``` 此设置仅在编译时启用了 OpenSSL 支持时可用。它是 CA 私钥的密码。此设置为可选,仅在启用证书动态生成时使用。详情请参见 'generate-certificates'。 **`ca-verify-file `** ```haproxy ca-verify-file ``` 此设置指定一个 PEM 文件,从中加载用于验证客户端证书的 CA 证书。该设置指定的 CA 证书不得包含在服务器 Hello 消息中发送的 CA 名称列表内。通常,“ca-file”应配置为中间证书,而“ca-verify-file”应配置为用于构建证书链末端的证书,例如根 CA 证书。 **`cc `** ```haproxy cc ``` 此设置仅在定义了 TCP_CONGESTION 的系统上可用,并已在 Linux 和 FreeBSD 上完成验证。该设置指定一个 TCP 拥塞控制算法名称,并配置监听器在从该监听器接受的所有连接上使用此算法。典型名称包括 "reno"、"cubic",具体取决于操作系统。在某些系统上,配置特定算法可能需要特殊权限。在 Linux 上,可用算法列表可在 sysctl "net.ipv4.tcp_available_congestion_control" 中找到,而无需特权即可使用的算法列表位于 "net.ipv4.tcp_allowed_congestion_control"。若需访问需要额外权限的算法,可能需要 "cap_net_admin" 能力(参见全局段中的 "setcap")。若无法配置特定拥塞控制算法,将保持默认算法不变,并发出警告以报告该问题。另请参阅:"cc" 服务器关键字([第 5.2 节](/zh/docs/haproxy/bind-and-server-options/#section-5-2))。示例: ```text frontend public bind:443 cc bbr # use the BBR algorithm for high bandwidths ``` **`ciphers `** ```haproxy ciphers ``` 此设置仅在编译时启用了 OpenSSL 支持时可用。它用于设置在 SSL/TLS 握手过程中协商的加密算法列表(“加密套件”)的描述字符串,适用于 TLSv1.2 及以下版本。该字符串的格式由 OpenSSL 手册页中的“man 1 ciphers”定义。有关背景信息和建议,请参阅例如 () 和 ()。对于 TLSv1.3 的加密套件配置,请参阅 “ciphersuites” 关键字。 **`ciphersuites `** ```haproxy ciphersuites ``` 当编译时启用了 OpenSSL 支持且使用 OpenSSL 1.1.1 或更高版本构建 HAProxy 时,此设置才可用。该设置用于指定在 TLSv1.3 握手过程中协商的加密算法列表(“加密套件”)的描述字符串。字符串格式由 OpenSSL 手册页中 “man 1 ciphers” 的 “ciphersuites” 部分定义。对于 TLSv1.2 及更早版本的加密配置,请参阅 “ciphers” 关键字。此设置可能接受 TLSv1.2 加密套件,但该行为未在文档中说明,不建议使用,因其可能存在不一致或缺陷。OpenSSL 的默认 TLSv1.3 加密套件为: "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256" TLSv1.3 仅支持 5 种密码套件: - 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 示例: ```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 ``` 此设置仅在编译时启用 OpenSSL 支持时可用。它用于设置描述与客户端认证相关的签名算法列表的字符串,该列表在协商过程中确定。字符串格式由 OpenSSL 手册页中的“man 3 SSL_CTX_set1_client_sigalgs”定义。若未明确特定使用场景,不建议使用此设置。 **`crl-file `** ```haproxy crl-file ``` 此设置仅在编译时启用了 OpenSSL 支持时可用。它指定一个 PEM 文件,用于加载证书吊销列表,以验证客户端证书。需要为证书信任链中每个证书颁发机构的证书提供相应的证书吊销列表。 **`crt `** ```haproxy crt ``` 此设置仅在编译时启用了 OpenSSL 支持的情况下可用。 HAProxy 使用缓存系统,证书文件仅在证书存储中加载一次,后续每次使用 "crt" 关键字时均会使用该缓存版本。当证书在 "crt-store" 中声明时,证书存储将从此处填充,不再通过检测文件扩展名尝试加载额外文件。 指定一个包含所需证书及关联私钥的 PEM 文件。 该文件可通过将多个 PEM 文件合并为一个来构建(例如:cat cert.pem key.pem > combined.pem)。 如果CA 要求提供中间证书,也可将其合并到此文件中。 中间证书也可通过 "issuers-chain-path" 指令在目录中共享。 如果该文件不包含私钥,HAProxy 将尝试在相同路径下、附加 ".key" 后缀的位置加载密钥。 如果所使用的 OpenSSL 支持 Diffie-Hellman,则会加载此文件中的参数。 如果使用目录名而非 PEM 文件,则该目录中所有文件将按字母顺序加载,除非文件名以 '.key'、'.issuer'、'.ocsp' 或 '.sctl' 结尾(保留扩展名)。以点号开头的文件也会被忽略。该指令可多次指定,以从多个文件或目录加载证书。当客户端提供有效的 TLS 服务器名称指示(SNI)字段,且该字段匹配证书中的 CN 或备用主题之一时,证书将被呈现给客户端。支持通配符,其中通配符字符 '\*' 用于替代主机名的第一个组件(例如 \*.example.org 匹配 [www.example.org](http://www.example.org),但不匹配 [www.sub.example.org](http://www.sub.example.org))。若使用空目录,HAProxy 将不会启动,除非使用了 "strict-sni" 关键字。 如果客户端未提供 SNI,或 SSL 库不支持 TLS 扩展,或客户端提供的 SNI 主机名与任何证书均不匹配,则将呈现第一个加载的证书。这意味着在从目录加载证书时,强烈建议首先加载默认证书文件,或确保其始终为目录中的第一个文件。若需选择多个默认证书(1 个 RSA 和 1 个 ECDSA),有以下 3 种选项: - 可将多证书捆绑配置为首个证书(`crt foobar.pem`),其中现有文件为 `foobar.pem.ecdsa` 和 `foobar.pem.rsa`。 - 或在 crt-list 行中为每个证书配置 '\*' 过滤器。 - 可使用 'default-crt' 关键字。 请注意,同一证书可多次加载而不会产生副作用。 部分证书颁发机构(如 GoDaddy)在申请证书时提供服务器类型下拉列表,但该列表中不包含 HAProxy。若出现此情况,请务必选择证书颁发机构认为需要中间证书的 Web 服务器类型(例如,GoDaddy 选择 Apache Tomcat 可获取正确的证书包,但选择其他类型如 NGINX 等可能导致获取错误的证书包,部分客户端将无法正常工作)。 对于每个 PEM 文件,HAProxy 会检查同路径下是否存有以 ".ocsp" 为后缀的文件。若找到该文件,将自动启用 TLS 证书状态请求扩展(亦称“OCSP 站点绑定”)支持。该文件内容为可选项。若不为空,必须包含以 DER 格式编码的有效 OCSP 响应。有效的 OCSP 响应必须满足以下规则:状态必须为良好,必须是针对 PEM 文件中证书的单一响应,且在添加时必须处于有效状态。若不满足上述规则,OCSP 响应将被忽略,并发出警告。为确定 OCSP 响应适用于哪个证书,需提供颁发者证书。若 PEM 文件中未找到颁发者证书,HAProxy 将尝试从与 PEM 文件同路径下以 ".issuer" 为后缀的文件中加载,若该文件不存在则操作失败并报错。 对于每个 PEM 文件,HAProxy 还会检查同路径下附加 ".sctl" 后缀的文件是否存在。若找到该文件,将启用证书透明度(Certificate Transparency,RFC6962)TLS 扩展。该文件必须包含符合 RFC 描述的有效签名证书时间戳列表。HAProxy 会解析文件以检查基本语法,但不会验证签名。 在某些情况下,支持多种密钥类型(例如,在向客户端提供的加密套件中同时支持 RSA 和 ECDSA)是可取的。这使得支持 EC 证书的客户端能够使用 EC 加密算法,同时仍可兼容仅支持 RSA 的旧版客户端。 为实现此功能,需使用 OpenSSL 1.1.1。可通过为每种证书类型提供一个 crt 条目,或像 HAProxy 1.8 之前那样配置“证书捆绑包”来实现此行为。参见“ssl-load-extra-files”。 **`crt-ignore-err `** ```haproxy crt-ignore-err ``` 此设置仅在编译时启用了 OpenSSL 支持时可用。设置一个以逗号分隔的错误 ID 列表,用于在验证深度 == 0 时忽略这些错误。错误 ID 可以是数值,也可以是常量名称(X509_V_ERR),该名称可在 OpenSSL 文档中找到: 建议使用常量名称,因为数值可能在 OpenSSL 新版本中发生变化。若设置为 'all',则忽略所有错误。忽略错误时不会中止 SSL 握手。 **`crt-list `** ```haproxy crt-list ``` 此设置仅在编译时启用 OpenSSL 支持时可用。它指定一个 PEM 文件列表,每个证书可选配 SSL 配置和 SNI 过滤器,每行格式如下: ```text [\[ ...\]] [[!] ...] ``` 空行以及以井号('#')开头的行将被忽略。 可通过统计信息套接字动态操作 crt-list。(参见管理指南中的“add ssl crt-list”、“del ssl crt-list”和“show ssl crt-list”) crt-list 通常为专用文件,但通过 "crt" 指令加载的目录在内部也表示为 crt-list。前端中的 "ssl-f-use" 指令同样声明了一个与该前端关联的 crt-list。 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) ``` 示例: ```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 ``` 此选项的功能与 "crt" 选项相同,区别在于该证书也将作为默认证书使用。可以添加多个默认证书,例如同时配置 ECDSA 和 RSA 证书,但添加更多默认证书并无实际意义。 此选项不会禁用隐式默认证书。若在任何 'default-crt' 或其他 'crt' 之前声明了 'crt' 证书,该证书仍会被用作默认证书。 当绑定行未使用 "strict-sni" 选项时,将使用默认证书。当客户端未使用服务器名称扩展,或服务器名称与任何已配置的证书不匹配时,将提供默认证书。 示例: ```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 ``` 另请参见“crt”关键字。 **`curves `** ```haproxy curves ``` 此设置仅在编译时启用 OpenSSL 支持时可用。它用于设置在使用 ECDHE 进行 SSL/TLS 握手时协商的椭圆曲线算法列表(“曲线套件”)的描述字符串。字符串格式为以冒号分隔的曲线名称列表。示例:X25519:P-256(不含引号)。当设置 "curves" 时,"ecdhe" 参数将被忽略。 **`defer-accept`** ```haproxy defer-accept ``` 是一个可选关键字,仅在某些 Linux 内核上受支持。它表示连接仅在有数据到达时才会被接受,最迟在首次重传后被接受。该选项应仅用于客户端首先发起通信的协议(例如 HTTP)。通过确保在连接建立时大部分请求数据已就绪,可略微提升性能。另一方面,该选项无法检测未发送数据的连接。请注意,所有版本低于 2.6.31 的内核均存在此选项失效的问题,因为连接始终不会被接受,直到客户端发送数据。这可能导致前端防火墙看到已建立的连接,而代理仅在 SYN_RECV 时才看到该连接。此选项仅对 TCPv4/TCPv6 套接字有效,其他类型的套接字将忽略该选项。 **`ecdhe `** ```haproxy ecdhe ``` 此设置仅在编译时启用了 OpenSSL 支持时可用。它用于设置生成 ECDH 临时密钥所使用的命名曲线(RFC 4492)。默认使用的命名曲线为 prime256v1。 **`ech [ EXPERIMENTAL ]`** ```haproxy ech [ EXPERIMENTAL ] ``` 将 `` 中的所有 ECH 密钥应用到绑定行。文件必须具有 .ech 扩展名,并且 ECH 必须使用 PEM 文件格式。() 此关键字用于在共享模式下启用 ECH,由 HAProxy 同时充当 TLS 终端与 ECH 终端。参见 本文为实验性功能,需在 global 段中启用 "expose-experimental-directives" 指令。该功能还要求使用支持 ECH 的 OpenSSL 版本(),且 HAProxy 必须以 USE_ECH=1 编译。AWS-LC 的 ECH API 不受支持。 示例: ```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 ``` 此选项仅在使用统计信息套接字时可用。它使统计信息套接字具备将监听器文件描述符传递给另一个 HAProxy 进程的能力。在主进程/工作进程模式下,此操作已不再必要,监听器将通过主进程与工作进程之间的内部套接字对自动传递。参见管理指南中的 "-x"。 **`force-sslv3`** ```haproxy force-sslv3 ``` 此选项强制仅在从该监听器创建的 SSL 连接中使用 SSLv3。在高连接速率场景下,SSLv3 通常比 TLS 对应版本的开销更低。此选项也可在全局语句 "ssl-default-bind-options" 中使用。另请参见 "ssl-min-ver" 和 "ssl-max-ver"。 **`force-tlsv10`** ```haproxy force-tlsv10 ``` 此选项强制仅在从此监听器创建的 SSL 连接中使用 TLSv1.0。该选项也可在全局语句 "ssl-default-bind-options" 中使用。另请参见 "ssl-min-ver" 和 "ssl-max-ver"。 **`force-tlsv11`** ```haproxy force-tlsv11 ``` 此选项强制仅在从此监听器创建的 SSL 连接中使用 TLSv1.1。该选项也可在全局语句 "ssl-default-bind-options" 中使用。另请参见 "ssl-min-ver" 和 "ssl-max-ver"。 **`force-tlsv12`** ```haproxy force-tlsv12 ``` 此选项强制仅在从此监听器创建的 SSL 连接中使用 TLSv1.2。该选项也可在全局语句 "ssl-default-bind-options" 中使用。另请参阅 "ssl-min-ver" 和 "ssl-max-ver"。 **`force-tlsv13`** ```haproxy force-tlsv13 ``` 此选项强制仅在从此监听器创建的 SSL 连接中使用 TLSv1.3。该选项也可在全局语句 "ssl-default-bind-options" 中使用。另请参见 "ssl-min-ver" 和 "ssl-max-ver"。 **`generate-certificates`** ```haproxy generate-certificates ``` 此设置仅在编译时启用 OpenSSL 支持时可用。它可启用动态 SSL 证书生成。需要 CA 证书及其私钥(参见 'ca-sign-file')。当 HAProxy 配置为透明正向代理时,由于向客户端呈现的证书存在通用名称不匹配问题,SSL 请求会出错。启用此选项后,HAProxy 将尝试使用客户端提供的 SNI 主机名伪造证书。仅当没有证书与 SNI 主机名匹配时(参见 'crt-list')才执行此操作。 发生证书生成错误时,连接将回退到默认证书。使用 'strict-sni' 时,不会使用默认证书,连接将导致握手失败。 当 HAProxy 配置为反向代理时,也可用于简化包含多个后端的架构部署。 创建 SSL 证书是一项开销较大的操作,因此使用 LRU 缓存来存储伪造的证书(参见 'tune.ssl.ssl-ctx-cache-size')。该机制会增加 HAProxy 的内存占用,以降低同一证书被多次使用时的延迟。 **`gid `** ```haproxy gid ``` 设置 Unix 套接字的组为指定的系统 gid。也可在全局段的 "unix-bind" 语句中默认设置。请注意,某些平台会直接忽略此设置。此设置与 "group" 设置等效,不同之处在于使用组 ID 而非组名。此设置对非 Unix 套接字无效。 **`group `** ```haproxy group ``` 设置 Unix 套接字所属的系统组。该设置也可在全局段的 "unix-bind" 语句中默认指定。请注意,某些平台会直接忽略此设置。此设置与 "gid" 设置等效,区别在于使用组名而非其 gid。该设置对非 Unix 套接字无效。 **`guid-prefix `** ```haproxy guid-prefix ``` 为当前绑定行上分配的每个监听套接字生成区分大小写的全局唯一 ID。前缀将与当前绑定行上监听器的位置索引连接,以字符“-”作为分隔符。有关其格式的更多信息,请参见“guid”代理关键字的描述。另请参见“shm-stats-file”。 **`id `** ```haproxy id ``` 修复套接字 ID。默认情况下,套接字 ID 会自动分配,但有时固定套接字 ID 可以更方便地进行监控。该值必须为严格正数,且在监听器/前端范围内唯一。此选项仅在定义单个套接字时可用。 **`idle-ping `** ```haproxy idle-ping ``` 可用于以下上下文:tcp、http、log 定义空闲前端连接的周期性存活检测间隔。如果对等节点在下一次预定检测前无法响应,则关闭连接;否则,刷新客户端超时并保持连接。请注意,http-request/http-keep-alive 定时器与 idle-ping 定时器并行运行,且不会因 idle-ping 而刷新。 此功能依赖于特定底层协议支持。目前,仅 H2 mux 实现了该功能。 其他协议会直接忽略空闲 ping。 此选项在使用反向 HTTP 时尤为有用。在 bind 行上设置该选项,对负责主动发起连接的对等节点尤为有用,该节点随后将通过这些连接接收入站流量。 **`interface `** ```haproxy interface ``` 限制套接字绑定到特定网络接口。指定后,仅来自该特定接口的数据包会被套接字处理。此功能当前仅在 Linux 上受支持。接口必须是主系统接口,而非别名接口。若前端绑定到不同接口,可将多个前端绑定至同一地址。请注意,绑定到网络接口需要 root 权限。该参数仅与 TCPv4/TCPv6 套接字兼容。指定后,返回流量将使用与入站流量相同的接口及其关联的路由表,即使已配置通过不同接口的显式路由。此机制在需使同一客户端 IP 地址能够访问位于不同接口上的前端时,可用于解决非对称路由问题。 **`ktls [ EXPERIMENTAL ]`** ```haproxy ktls [ EXPERIMENTAL ] ``` 启用或禁用套接字的 kTLS。若启用,当内核支持且加密算法兼容时,将使用 kTLS。此功能仅在 Linux 内核 4.17 及以上版本中可用。请注意,部分网络驱动程序和/或 TLS 栈可能将 kTLS 使用限制为仅支持 TLS v1.2。参见“force-tlsv12”。 **`label