我在一个位于Load Balancer后面的EC2实例上部署了一个RESTful应用程序。 身份验证部分由名为“X-App-Key”的自定义请求标头处理。
我刚刚将经典的负载均衡器迁移到应用程序负载均衡器,并且我开始遇到间歇性问题,其中一些有效请求(通过使用CURL进行测试)对某些用户的身份验证失败。看起来自定义请求标头只是间歇性地传递。使用apache bench大约有500个请求失败。 如果我使用经典的Load Balancer进行测试,那么所有500个都会成功。
我对此进行了更多调查,发现失败的用户正在使用稍微更新版本的CURL,特别是来自这些用户的请求正在使用HTTP2。如果我向CURL请求添加“--http1.1”,它们都会正常传递。
因此,使用自定义请求标头和新一代应用程序负载均衡器和HTTP2时,问题似乎是特定的。
我做错了什么?!
答案 0 :(得分:0)
您可能必须在负载均衡器中启用Sticky sessions。
他们需要保持会话打开,喜欢同一个实例。
但是,在应用程序级别,需要保持会话处于活动状态,并且在某种服务中并不真正有用,(取决于系统的性质,而不是真正推荐的)它在REST系统中提供了性能降低。
答案 1 :(得分:0)
我在这篇文章中找到了答案......
AWS Application Load Balancer transforms all headers to lower case
似乎标题来自ALB的小写字母。我需要更新我的后端来支持这个