使用 HTTP2 的 AWS 应用程序负载均衡器

AWS Application Load Balancer with HTTP2

我有一个 RESTful 应用程序部署在负载均衡器后面的许多 EC2 实例上。 身份验证部分由名为 "X-App-Key".

的自定义请求 header 处理

我刚刚将我的经典负载均衡器迁移到应用程序负载均衡器,我开始遇到间歇性问题,其中一些有效请求(通过使用 CURL 测试)无法对某些用户进行身份验证。看起来自定义请求 header 只是间歇性地通过。使用 apache bench 大约 500 个请求中有 100 个失败。 如果我使用经典负载均衡器进行测试,所有 500 个都成功。

我对此进行了更多调查,发现失败的用户使用的是稍新版本的 CURL,特别是来自这些用户的请求使用的是 HTTP2。如果我将“--http1.1”添加到 CURL 请求,它们都可以正常通过。

因此,这些问题似乎特定于我们使用自定义请求 header 以及新一代应用程序负载平衡器和 HTTP2。

我是不是做错了什么?!

您可能需要在负载均衡器中启用 Sticky sessions

需要它们来保持对同一实例的会话打开。

但是,在应用程序级别需要保持会话处于活动状态,并且在某些服务中并不是很有用,(取决于您系统的性质,不推荐) 因为它降低了类似 REST 的系统的性能。

我在这个 post...

上找到了答案

AWS Application Load Balancer transforms all headers to lower case

headers 似乎是小写的 ALB。我需要更新我的后端来支持这个