如何在 HAProxy 配置中启用 HTTP/2 支持需要哪些参数?

文章导读
要在 HAProxy 中启用 HTTP/2 支持,必须使用 HAProxy 1.6 或更新版本并配置 OpenSSL 支持 ALPN 协议,bind 行需添加 alpn h2,http/1.1 参数实现协议协商。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

如何在 HAProxy 配置中启用 HTTP/2 支持需要哪些参数?

要在 HAProxy 中启用 HTTP/2 支持,必须使用 HAProxy 1.6 或更新版本并配置 OpenSSL 支持 ALPN 协议,bind 行需添加 alpn h2,http/1.1 参数实现协议协商。

原因分析

HTTP/2 在 HAProxy 中只支持使用 ALPN(应用层协议协商)扩展,这是基本的技术要求。大部分有 OpenSSL 1.0.1 或更旧版本的 Linux 分支都不支持 ALPN,而 ALPN 协议允许应用层去协商连接中使用的协议,这是在相同 TCP 端口支持 HTTP/2 和 HTTP/1.1 的基础。根据 2018 年 9 月 18 日的技术指南,HTTP/2 使用二进制数据而非 HTTP/1.1 的明文,并且使用 header 数据压缩,通过一个连接加载多种资源提升并发性。

解决方案

1. 版本要求检查

首先确认 HAProxy 版本,根据官方文档 HAProxy version 2.2.22 - Configuration Manual,需要 HAProxy 1.6 或更新版本才能支持 HTTP/2。执行命令haproxy -v查看版本号。同时需要确认 OpenSSL 版本支持 ALPN,执行openssl version检查,低于 1.0.1 的版本不支持 ALPN 协议。

2. bind 行配置 proto 和 alpn 参数

在 frontend 或 listen 配置段中,bind 行需要添加 alpn 参数。配置示例:bind *:443 ssl crt /etc/haproxy/certs/site.pem alpn h2,http/1.1。根据 2021 年 1 月 7 日的博客园资料,bind 和 server 均支持 proto 参数用于强制指定连接所使用的协议。如果不指定 proto 参数,bind 会根据客户端的请求自动使用合适的协议,而 server 如果不指定 proto 参数则默认使用 http1.1。

3. server 行协议配置

backend 配置段中 server 行可指定 proto 参数:server web1 192.168.1.10:80 proto http1.1server web1 192.168.1.10:80 proto h2。bind 和 server 的 proto 可以自由组合,即 bind proto=h2 配 server proto=http1.1,或者 bind proto=http1.1 配 server proto=h2。

4. 客户端验证方法

使用 curl 验证 HTTP/2 支持,执行curl -V查看 features 是否包含 HTTP2。如果使用 http 协议访问负载均衡器,curl 需指定--http2-prior-knowledge参数,否则即使指定了--http2参数默认也会使用 http1.1 协议。如果是通过 https 协议访问,使用-v参数观察 alpn 的协商过程。

如何在 HAProxy 配置中启用 HTTP/2 支持需要哪些参数?

注意事项

根据实际用户反馈,有几个常见坑需要避免:第一,如果后端是 http1.1,暂时不能和透明代理同时启用,会导致no free ports的错误。第二,如果同时启用 nbproc 和 nbthread 会出现日志错误[ALERT] config : cannot enable multiple processes if multiple threads are configured. Please use either nbproc or nbthread but not both.无法启动服务。第三,根据 2025 年 2 月 23 日的配置详解,HAProxy 并发连接可达 40000-50000 个,单位时间处理最大请求 20000 个,配置 maxconn 参数时需根据实际硬件能力调整,默认值为 2000。第四,Chrome 浏览器需要打开 console 查看实际建立的连接使用的 http 协议,目前最新版本都已默认支持 http2。

参考来源

来源:博客园 - haproxy 支持 http2(2021 年 1 月 7 日)

来源:HAProxy 官方文档 - HAProxy version 2.2.22 Configuration Manual

来源:技术指南 - HAProxy、Nginx 配置 HTTP/2 完整指南(2018 年 9 月 18 日)

来源:CSDN 博客 - haproxy 基本配置详解(2025 年 2 月 23 日)