作为一家企业公司,我们希望迁移到 http/2 。以下是我们的基础设施。
基础设施 我们目前使用 AWS ALB 作为负载均衡器,由我们在其上运行 Apache Web 服务器的 EC2 实例提供支持。Apache Web 服务器是 http 服务器,然后通过 mod_jk 连接器连接到 tomcat servlet 容器。webapp 在 tomcat 中。
我们在 apache Web 服务器上启用了 http/2,但问题是 AWS ALB 只与前端而不是与后端对话 http/2。我已经阅读了通过使 AWS ALB 作为第 4 层负载均衡器(TCP 模式或 TCP 直通模式)运行来克服这个问题的解决方案,下面是一个讨论它的链接。这可能有几个问题,因为从客户端以 http/2 格式传递的信息在负载均衡器转换为 TCP 时会丢失,例如标识客户端的 x-forwarded-for 标头。另外,我猜(根据一些博客)会话粘性也会受到影响,因为这也是仅在第 7 层支持的功能。
问题是如何在前端和后端的 AWS ALB 中支持 http/2 而不会影响会话粘性和客户端识别等功能。如果不是 AWS ALB,是否还有其他支持端到端 http/2 的负载均衡器。
是否可以仅在前端启用 http/2 并在 AWS ALB 和后端实例(Apache Web 服务器)之间使用 http/1.1。我对这个问题的看法是,如果我们在前端启用了 http/2,那么浏览器和 ALB 之间的一个 TCP 连接上的请求会多路复用,但是负载均衡器和 apache Web 服务器之间的每个请求都会有一个 TCP 连接因此不会真正请求多路复用。如果我的理解有误,请纠正我。
如基础设施图中所示,我们还使用 AWS Cloudfront 作为 CDN。cloudfront 也存在类似的问题。AWS cloudfront 与客户端交谈 http/2,但与后端交谈 http/1.1(这里的后端是指 AWS ALB)。AWS cloudfront 上的服务器推送状态如何?他们的文档中没有明确提到它。服务器推送将是我们想要利用的一项功能。