AWS 负载均衡器 502
Posted
技术标签:
【中文标题】AWS 负载均衡器 502【英文标题】:AWS Load Balancer 502 【发布时间】:2018-04-14 18:23:46 【问题描述】:我在 EC2 实例上运行微服务(使用不同的编程语言)。 在生产中,当这些服务尝试相互交互时,我注意到一些 502 Bad Gateway Errors。 此外,在请求服务的日志中,它没有显示任何 api 调用正在被命中
示例服务 A 调用服务 B,但在服务 B 日志中没有任何内容表明调用来自服务 A。
可能是 AWS 负载均衡器问题吗?任何帮助,将不胜感激。提前致谢。
尝试的解决方案: 我们尝试在每个服务中创建 http/https 连接代理,但仍然遇到此问题。
更新: 在 lb 日志中,api 被记录,但是目标响应代码显示“-”而 lb 响应代码显示 502 或 504。这是否意味着 lb 无法处理流量或我的应用程序?
还有什么可能的解决方案?
【问题讨论】:
您可以启用 lb 日志,如果流量以正确的方式通过它,您将能够在此处看到输出或发布日志 在lb日志中,api被记录了,但是目标响应码显示“-”,而lb响应码显示502或504。这是否意味着lb无法处理流量或我的应用程序? @KushVyas @Root 我们遇到了完全相同的问题。你还有吗,还是找到解决办法了? @JanDoerrenhaus 是的,我们找到了解决方案 我们遇到了完全相同的问题 【参考方案1】:我们遇到了同样的问题。
在我们的设置中,AWS 应用程序 ELB 有一个包含 4 个 EC2 实例的目标组。在每个 EC2 实例上,都有一个 Apache2 转发到 Tomcat。
ELB 的默认连接 KeepAlive 为 60 秒。 Apache2 的默认连接 KeepAlive 为 5 秒。如果 5 秒结束,Apache2 将关闭其连接并重置与 ELB 的连接。但是,如果请求在正确的时间到达,ELB 将接受它,决定将其转发到哪个主机,并且在那一刻,Apache 关闭连接。这将导致上述 502 错误代码。
解决方案是:当您有级联代理/LB 时,要么调整它们的 KeepAlive 超时,或者 - 最好 - 甚至使它们越长越长。
我们将 ELB 超时设置为 60 秒,将 Apache2 超时设置为 120 秒。问题消失了。
【讨论】:
我们在系统中发现了问题这是由于 ec2 实例立即关闭,而不是等待耗尽期我们已经将 elb 设置为 60 秒,将 apache 设置为 120 秒 我们目前也有同样的问题,当这种情况发生时,我们能在 Apache 端看到任何日志吗? @Naga 我们没有,不。因为 Apache 没有注意到任何错误。 ELB 访问日志显示带有 502 状态代码的请求,而 Apache 访问日志则不显示任何内容。 @Jan 感谢您提供的信息!其实也是一样的。我检查了 apache 访问日志和错误日志,但我找不到任何东西...我们将尝试与您相同的设置,看看如何。 这很难弄清楚 - 感谢您的问答。增加 KeepAliveTimeout 后,这解决了我的问题【参考方案2】:运行状况检查使用 HTTP2。通过将http2
添加到监听 80,我让运行 nginx 的 EC2 实例运行良好。
listen 80 default_server http2;
【讨论】:
以上是关于AWS 负载均衡器 502的主要内容,如果未能解决你的问题,请参考以下文章
Nginx 负载均衡如何配置,高并发报502如何返回正常信息?