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 版本兼容。
步骤三:配置 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 配置 https 转发,透传真实 IP(实测时间戳 2024 年 1 月 31 日)
来源:运维部署文档 - haproxy 反向代理环境部署(版本 haproxy-1.5.14,资料日期 2026 年 1 月 4 日)
来源:HAProxy 算法文档 - 调度算法分类与配置实例(资料日期 2024 年 8 月 11 日)