HAproxy与内部https / 2.0

时间:2018-03-17 06:59:39

标签: docker https haproxy http2

以下图片是我的系统如何工作,它们都在docker上运行。我使用HAproxy实例作为路由器。问题是:我们应该这样使用吗?是否存在风险或是否会降低系统速度?我们应该使用内部https / 2.0吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

在我看来,没有什么理由或需要在m y answer to this question中讨论的整个堆栈中说HTTP / 2。 HTTP / 2的主要优点是高延迟的客户端到服务器连接,并且与低延迟服务器 - 服务器连接没有多少好处,特别是因为HTTP / 2的支持不是通用的,并且支持后端HTTP / 2连接特别弱(据我所知,目前只有Apache supports this。)

后端连接通过HTTP / 2的几个原因之一可能是允许来自下游服务器的推送,但即使这最好由边缘服务器处理(在您的情况下是HAproxy - 虽然这还不支持这个)使用链接头和可能103响应。否则,当客户端不支持推送而中间人支持推送时,您是否会推送时会产生很多困惑。另外,我所知道的配置无论如何都支持完全推进(Apache doesn’t for sure and sees little reason to)。

这将我们带回您的设置。它很好,甚至可能是推荐的,不会一直使用HTTP / 2,原因如上所述。我不确定HAProxy为您提供什么以及前端和后端的含义。 HAProxy是否为您卸载HTTPS?或者作为许多前端和后端的负载平衡器?或者它是否只是分隔前端和后端请求?它们如何区分(通过域?按路径?)?我假设前端使用Nginx或Apache提供静态文件,而后端使用Java或Node等应用服务器提供动态生成的内容?根据这些问题的答案,您可能需要考虑当前设置的替代方案:

选项1 - 删除HAproxy并通过前端Web服务器传递所有内容:

Front end ==> Back end

优点 - 允许Web服务器位于app服务器前面并添加HTTPS,HTTP / 2支持(包括HTTP / 2推送),安全性,性能,集中日志等等。

选项2 - 让HAProxy在TCP模式下工作,并让前端处理HTTP / 2以及更多:

HAProxy ==TCP==> Front end ==HTTP/1==> Back end

优点 - 允许Web服务器坐在应用服务器前面并添加HTTPS,HTTP / 2支持(包括HTTP / 2推送),安全性,性能,集中日志...等等仍允许HAproxy卸载HTTPS和/或负载平衡。

选项3 - 坚持你所拥有的

HAProxy ==HTTP/1==> Front end
HAProxy ==HTTP/1==> Back end

优点 - 仍然提供HTTP / 2,不需要更改。 缺点 - 在HAproxy支持之前不允许HTTP / 2推送,不允许在后端使用前端功能(例如,为安全性和性能更简单地设置常用HTTP功能,整合日志记录,HTTP / 2推送等等)。

如果对此主题感兴趣,我会在upcoming book which is available in early preview now中讨论很多这些事情。