反向代理后面的HTTP/2

sfT*_*mas 3 reverse-proxy nginx http2

到目前为止,所有教程都告诉我,我需要在我的服务器上启用SSL以获得HTTP/2支持.

在给定的场景中,我们在后端Tomcat/Jetty服务器前面有nginx,尽管性能方面值得在后端启用HTTP/2,但在那里使用HTTPS的要求似乎也是一种过度杀伤力.

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

是不是有办法提供HTTP/2支持(或至少类似的性能),并且设置较少涉及?

sbo*_*det 9

我们建议的典型设置是将HAProxy放在Jetty前面,并配置HAProxy以卸载TLS和Jetty来说明文HTTP/2.

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

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

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

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

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

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

Bar*_*ard 6

您不需要一直讲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,这也不是问题.