AWS 负载均衡器 502 错误网关

sol*_*tex 9 amazon-ec2 amazon-web-services node.js amazon-elb http-status-code-502

我在带有应用程序负载均衡器的 EC2 上托管的 Node/express 中编写了微服务。

有些用户甚至在请求到达服务器之前就收到 502 错误。

我在每个实例内注册每个日志,并且没有这些请求的日志,我有紧接在 502 之前的请求,以及紧接在 502 之后的请求,这就是为什么我假设该请求永远不会到达服务器。大多数用户通过刷新页面或使用匿名选项卡来解决此问题,这会连接到另一台计算机(我们有 6 个)。

我可以从负载均衡器日志中看出,负载均衡器几乎立即响应 502 请求。我猜这可能是 TCP RST。

我很久以前也遇到过类似的问题,我不得不将keepAliveTimeout和添加headersTimeout到节点配置中。这是我的设置(仍然使用 60 年代的 LB 默认值):

server.keepAliveTimeout = 65000;
server.headersTimeout = 80000;
Run Code Online (Sandbox Code Playgroud)

所有实例的指标,尤其是内存和 CPU 使用率都很好。

这些 502 错误是在我们进行更新后开始的,其中我们引入了多个软件包,例如 axios。一开始我以为可能是axios,因为默认没有开启keep-alive。但这没有用。除了axios之外,我们只使用request

关于如何调试/解决此问题的任何提示?

sti*_*tel 6

HTTP 502 错误通常是由负载均衡器问题引起的。这可以解释为什么请求永远不会到达您的服务器,大概是因为负载均衡器由于某种或其他原因无法到达服务器。

此链接提供了一些有关如何从经典负载均衡器获取日志的提示。但是,由于您没有指定,您可能正在使用应用程序负载均衡器,在这种情况下,此链接可能更有用。