haproxy和apache tomcat堆栈上的HTTP / 2使用情况

时间:2018-01-04 14:22:43

标签: apache tomcat haproxy http2

我们有非常简单的设置,如:

客户端< -----> Haproxy< ----->带虚拟主机的Apache使用mod_jk连接到tomcat。

我计划在上面的设置中利用HTTP / 2。我在HAPROXY终止了SSL。在apache中,我有100-120个虚拟主机。有人建议我应该为所有当前的非SSL虚拟主机设置SSL证书+ SSL虚拟主机吗?

其次,我是否还需要在tomcat server.xml中设置ssl cert + Config?

我有点困惑,直到Stack中的哪一层应该实现HTTP / 2?

1 个答案:

答案 0 :(得分:1)

HAproxy only recently added support for HTTP/2 in 1.8但仅限于传入的前端连接,而不是传出的后端连接。

但即使如此,根据您所使用的软件版本以及它们支持的HTTP / 2支持,您还有一些选择:

  1. 在HAProxy上终止HTTP / 2,就像你终止SSL / TLS一样,只是说HTTP / 1.1到Apache并继续使用mod_jk与Tomcat交谈。

  2. 在HAProxy处终止SSL / TLS,并将明文HTTP / 2消息转发给Apache,然后Apache可继续使用mod_jk与Tomcat通信。这要求你使用稍微奇怪的声音组合来处理前端HAProxy连接,如HTTP(因此它卸载SSL / TLS),但后端连接到Apache,如TCP连接,而不是当前可能使用的HTTP连接。此设置详细here

  3. 将HAProxy更改为完整的TCP代理,而不是HTTP代理并将SSL / TLS加密请求转发给Apache,后者可以说HTTPS和HTTP / 2。这假设您不需要HAProxy的SSL / TLS和/或HTTP数据来知道要将其发送到哪个Apache。使用mod_jk与Tomcat通信。

  4. 完全删除HAProxy并在Apache终止您的SSL / TLS和HTTP / 2。如果您有一台Apache服务器为所有这些虚拟服务器提供服务,那么我不确定HAProxy目前正在为您提供什么?但是,如果您有多个Apaches,那么这将更有意义,因此您可能不想考虑此选项。

  5. 任何选项2-4,但也用mod_proxy_http2替换mod_jk,这样你就可以说到HTTP / 2(假设你的Tomcat版本支持HTTP / 2)。注意mod_proxy_http2仍然标记为实验性,因此您可能不习惯在生产环境中使用它。

  6. 你需要一直说HTTP / 2吗?在我看来没有,最大的好处是在你的基础设施的入口点,因为最大的收益是由于浏览器 - >入口点等低延迟链接的速度提升。但是,如果您想利用HTTP / 2 Push等,那么您可能需要一直支持它或使用链接头并让HTTP入口点支持它(例如Apache支持HTTP / 2推送并且可以推送资产如果Tomcat设置了适当的链接头,即使Tomcat不支持HTTP / 2)。有关详细信息,请参阅this question and the answers