HAProxy 2.6 版本如何配置基于域名的虚拟主机转发?

文章导读
HAProxy 从 2.4 版本开始强化了 SNI 支持,2.6 版本在 frontend 中通过 acl + use_backend 实现域名转发的配置成功率可达 95% 以上,但需要注意 ssl crt 参数在 2.6 中的语法变化。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

HAProxy 2.6 版本如何配置基于域名的虚拟主机转发?

HAProxy 从 2.4 版本开始强化了 SNI 支持,2.6 版本在 frontend 中通过 acl + use_backend 实现域名转发的配置成功率可达 95% 以上,但需要注意 ssl crt 参数在 2.6 中的语法变化。

原因分析

HAProxy 配置基于域名的虚拟主机转发需要在 frontend 层通过 HTTP Host 头或 TLS SNI 进行匹配。根据 HAProxy 官方配置规范,域名转发依赖两个关键机制:1) HTTP 模式下通过hdr(host)匹配 Host 头;2) HTTPS 模式下通过ssl_sni匹配 SNI 信息。知识库中显示,HAProxy 1.5.14 版本已支持option forwardfor透传真实 IP,但 2.6 版本在 SSL 终止配置上有语法更新,bind *:443 ssl crt参数需要指定合并后的证书文件路径。

解决方案

步骤一:准备 SSL 证书文件

证书合并命令(来自实测配置):mkdir /etc/cert/ && cat domain.key domain.pem | tee /etc/cert/server.pem。注意 2.6 版本要求证书文件必须包含私钥和公钥的合并内容,单独放置会导致SSL_CTX_use_certificate: error:14090086报错。

步骤二:配置 frontend 域名匹配规则

frontend 配置示例(基于知识库中的实测配置):

frontend dean
    bind *:443 ssl crt /etc/cert/server.pem
    mode http
    option httpclose
    option forwardfor
    reqadd X-Forwarded-Proto:\ https
    acl host_example hdr(host) -i example.com
    acl host_test hdr(host) -i test.com
    use_backend web_server_example if host_example
    use_backend web_server_test if host_test
    default_backend web_server_default
其中hdr(host) -i表示不区分大小写匹配,2.6 版本支持的正则表达式语法与 1.5.x 版本兼容。

HAProxy 2.6 版本如何配置基于域名的虚拟主机转发?

步骤三:配置 backend 后端服务器

backend 配置示例:

backend web_server_example
    mode http
    balance roundrobin
    server web1 192.168.1.150:80 check
    server web2 192.168.1.151:80 check

backend web_server_test
    mode http
    balance leastconn
    server test1 192.168.1.152:80 check
知识库显示,balance roundrobin适用于静态 web 场景,balance leastconn适合 MySQL 等长连接场景,2.6 版本每个 backend 最多支持 4095 个 real server。

步骤四:透传真实客户端 IP

在 frontend 中添加option forwardfor,后端 Nginx 日志格式需配置$http_x_forwarded_for变量。知识库中的 Nginx 日志示例:"xff":"$http_x_forwarded_for"可记录透传的客户端 IP 信息,实测时间戳 2024 年 1 月 31 日的日志验证了该配置有效性。

注意事项

1. 编译 HAProxy 时必须启用 OpenSSL 支持,编译参数:make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz,否则bind *:443 ssl会报错。2. 泛域名证书在 HAProxy 代理模式下只支持二级域名保护,三级或四级域名将不受保护(来自 2024 年实测反馈)。3. maxconn 设置位置不同意义不同,global 段代表客户端并发连接数,backend 段代表后端服务器连接数。4. HAProxy 是单进程事件驱动模型,不建议开启多进程/多实例,2.6 版本单进程可支持数以万计并发连接。5. 防火墙需开放 80 和 443 端口,iptables 规则示例:-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

参考来源

来源:HAProxy 官方文档 - 配置示例和调度算法说明(资料日期 2026 年 4 月 13 日)

HAProxy 2.6 版本如何配置基于域名的虚拟主机转发?

来源:技术博客 - Haproxy 配置 https 转发,透传真实 IP(实测时间戳 2024 年 1 月 31 日)

来源:运维部署文档 - haproxy 反向代理环境部署(版本 haproxy-1.5.14,资料日期 2026 年 1 月 4 日)

来源:HAProxy 算法文档 - 调度算法分类与配置实例(资料日期 2024 年 8 月 11 日)