HTTP/2 反向代理背后
HTTP/2 behind reverse proxy
到目前为止,所有教程都告诉我需要在我的服务器上启用 SSL 才能获得 HTTP/2 支持。
在给定的场景中,我们在后端 Tomcat/Jetty 服务器前面有 nginx,尽管从性能方面来说值得在后端启用 HTTP/2,但要求有那里的 HTTPS 似乎也有点矫枉过正。
HTTPS 在安全方面不需要(仅公开了 nginx),并且从操作的角度来看有点麻烦 - 我们必须将我们的证书添加到每个 Docker 容器中 运行 后端服务器。
有没有一种方法可以提供 HTTP/2 全程支持(或至少类似的性能),并且设置起来更少?
你不需要一直讲 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 在您网络的边缘。
我们推荐的典型设置是将 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 的翻译,这些好处中的 None 将起作用。
如果 Nginx 仅用作 Jetty 的反向代理,它不会增加任何好处,而且实际上会减慢您的系统速度,必须将请求转换为 HTTP/1.1 并将响应转换回 HTTP/2.
HAProxy 不进行任何转换,因此效率更高,并且允许完整的 HTTP/2 堆栈以及它为 HTTP/1.1.
带来的所有好处
到目前为止,所有教程都告诉我需要在我的服务器上启用 SSL 才能获得 HTTP/2 支持。
在给定的场景中,我们在后端 Tomcat/Jetty 服务器前面有 nginx,尽管从性能方面来说值得在后端启用 HTTP/2,但要求有那里的 HTTPS 似乎也有点矫枉过正。
HTTPS 在安全方面不需要(仅公开了 nginx),并且从操作的角度来看有点麻烦 - 我们必须将我们的证书添加到每个 Docker 容器中 运行 后端服务器。
有没有一种方法可以提供 HTTP/2 全程支持(或至少类似的性能),并且设置起来更少?
你不需要一直讲 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 在您网络的边缘。
我们推荐的典型设置是将 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 的翻译,这些好处中的 None 将起作用。
如果 Nginx 仅用作 Jetty 的反向代理,它不会增加任何好处,而且实际上会减慢您的系统速度,必须将请求转换为 HTTP/1.1 并将响应转换回 HTTP/2.
HAProxy 不进行任何转换,因此效率更高,并且允许完整的 HTTP/2 堆栈以及它为 HTTP/1.1.
带来的所有好处