HAProxy与Apache Tomcat架构下HTTP/2部署相关问题咨询
关于现有架构启用HTTP/2的详细解答
先明确你的现有架构链路:客户端 <-----> HAProxy(SSL终止)<-----> 多虚拟主机Apache(mod_jk)<-----> Tomcat,针对你的三个疑问逐一解答:
1. HTTP/2应该部署在哪一层?
最优选择是在HAProxy层启用HTTP/2,原因如下:
- 目前主流浏览器仅支持基于TLS的HTTP/2(即
h2协议),而你的SSL终止已经在HAProxy层,直接在这里启用HTTP/2可以让客户端和入口层建立高效的HTTP/2连接,最大化利用HTTP/2的多路复用等特性。 - HAProxy对HTTP/2的支持成熟且性能优异,不需要改动后续Apache和Tomcat的复杂配置(比如mod_jk与HTTP/2的兼容性问题)。HAProxy到Apache之间可以继续使用HTTP/1.1,完全不影响后端服务的正常运行。
如果一定要在Apache层启用HTTP/2,你需要确保Apache版本≥2.4.17,且启用mod_http2,但这样会增加Apache的配置复杂度(100+虚拟主机都要适配HTTP/2),而且无法利用HAProxy作为统一入口的性能优势,所以不推荐。
2. 是否需要为所有现有非SSL虚拟主机配置SSL证书及SSL虚拟主机?
是的,必须配置。理由如下:
- 如前所述,主流浏览器仅在HTTPS场景下支持HTTP/2,非SSL的HTTP虚拟主机无法使用HTTP/2协议,启用HTTP/2的意义就大打折扣。
- 现在搜索引擎和主流浏览器都强制推行HTTPS,非HTTPS站点会被标记为不安全,影响用户体验和站点可信度。
- 针对100-120个虚拟主机,推荐使用通配符SSL证书或多域名SAN证书,这样只需要一张证书就能覆盖所有虚拟主机,大幅降低证书管理的复杂度。
同时,建议配置所有HTTP虚拟主机自动301重定向到对应的HTTPS虚拟主机,比如在Apache的虚拟主机配置中添加:
<VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/ </VirtualHost>
3. 是否需要在Tomcat的server.xml中配置SSL证书及相关设置?
不需要。因为:
- 你的SSL终止已经在HAProxy层,HAProxy与Apache之间的通信是明文HTTP,Apache与Tomcat之间通过mod_jk使用AJP协议通信,这两段链路都不需要SSL加密。
- 如果在Tomcat层配置SSL,反而会增加不必要的加密开销,还需要维护额外的证书,完全没有必要。保持Tomcat原有的AJP连接配置即可。
补充:HAProxy启用HTTP/2的关键配置示例
在HAProxy的配置中,监听443端口的部分需要添加ALPN支持(指定HTTP/2优先):
frontend https_frontend bind *:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1.1 mode http http-use-htx default_backend apache_backend backend apache_backend mode http server apache1 192.168.1.100:80 check
其中alpn h2,http/1.1表示优先使用HTTP/2,不支持的客户端自动降级到HTTP/1.1;http-use-htx是HAProxy处理HTTP/2必需的配置(HAProxy 1.8+支持)。
内容的提问来源于stack exchange,提问作者ashok r
相关产品推荐
相关产品推荐

