到目前为止,所有教程都告诉我,我需要在服务器上启用SSL以获得HTTP / 2支持。
在给定的场景中,我们在后端Tomcat / Jetty服务器前面有nginx,尽管性能方面值得在后端启用HTTP / 2,但是在那里使用HTTPS的要求似乎也是如此。是一个矫枉过正的人。
在安全方面不需要HTTPS(仅暴露nginx),并且从操作角度来看有点麻烦 - 我们必须将我们的证书添加到运行后端服务器的每个Docker容器中。 / p>
是不是有办法提供HTTP / 2支持(或至少类似的性能),并且设置的参与程度较低?
答案 0 :(得分:8)
我们建议的典型设置是将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相关的所有好处。
答案 1 :(得分:5)
您不需要一直讲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,这也不是问题。你的网络。