2016-08-02 132 views
2

到目前为止,所有的教程都告诉我需要在我的服务器上启用SSL来支持HTTP/2。反向代理后面的HTTP/2

在给定的场景中,我们在后端Tomcat/Jetty服务器前有nginx,即使性能方面值得在后端启用HTTP/2,但也需要HTTPS是一个过度杀伤力。

安全方面不需要HTTPS(只暴露了nginx),从操作的角度来看有点麻烦 - 我们必须将证书添加到运行后端服务器的每个Docker容器中。

是否有解决方法提供HTTP/2支持一路(或至少类似的性能),并且涉及较少设置?

+0

>到目前为止,所有的教程都告诉我需要在我的服务器上启用SSL来支持HTTP/2。 推测原因是浏览器只支持http/2 over SSL:http://caniuse.com/#feat=http2(请参阅#2注释) –

回答

3

您无需一直说HTTP/2。

HTTP/2主要解决将影响客户端 - > Nginx连接的延迟问题。服务器到服务器的连接(例如Nginx到Tomcat/Jetty)可能会延迟较低,因此从HTTP/2获得的连接数量较少。

因此,只需在Nginx上启用HTTPS和HTTP/2,然后让它继续将HTTP/1.1与Tomcat/Jetty对话。

还有一个问题,一切是否都支持HTTP/2(例如Nginx proxy_pass指令和Tomcat/Jetty),如果仅在网络边缘使用HTTP/2,这也不是问题。

5

我们推荐的典型设置是将HAProxy放在Jetty前面,并将HAProxy配置为卸载TLS和Jetty以说明明文HTTP/2。

通过此设置,您可以获得高效的TLS卸载(由HAProxy通过OpenSSL完成)的好处,并且您可以获得完整的端到端HTTP/2通信的好处。

特别是,后者允许Jetty通过HTTP/2推送内容,如果后端通信是HTTP/1.1,这是不可能的。

其他好处包括更少的资源使用,更少的转换步骤(无需从HTTP/2转换为HTTP/1.1,反之亦然),完全使用HTTP/2功能的能力,例如流一直重置到应用程序。 如果在链中翻译为HTTP/1.1,这些好处都不会起作用。

如果Nginx仅用作Jetty的反向代理,它不会增加任何好处,它实际上会降低系统速度,不得不将HTTP请求转换为HTTP/1.1并将响应反馈回HTTP/2。

HAProxy不会进行任何转换,因此效率更高,并且允许完整的HTTP/2堆栈具有HTTP/1.1带来的所有优点。

+0

是否可以使用nginx进行TLS卸载? – sfThomas

+0

有趣!但是,如果HAProxy终止SSL,那么它可能会建立一个新的HTTP/2连接到Jetty。是否可以跨两个不同的HTTP/2连接使用所有功能(例如推送,流重置等)?如果是这样,那么你的设置似乎非常好! –

+0

@BazzaDP,是的,这是可能的。这是我们用来提供https://webtide.com和https://cometd.org的设置。 HAProxy只是将它解密的字节转发到后端,它并不知道它们是HTTP/2字节。 Jetty在后端提供明文HTTP/2,并利用Jetty的高级HTTP/2推送功能。我详细介绍了HAProxy和Jetty配置[这里](https://webtide.com/http2-with-haproxy-and-jetty/)。 – sbordet