繁体   English   中英

AWS 负载均衡器 502

[英]AWS Load Balancer 502

我在 EC2 实例上运行微服务(使用不同的编程语言)。 在生产中,当这些服务尝试相互交互时,我注意到一些 502 Bad Gateway Errors。 同样在请求的服务的日志中,它没有显示任何 api 调用正在被命中

示例服务 A 调用服务 B,但在服务 B 日志中没有任何内容表明呼叫来自服务 A。

可能是 AWS 负载均衡器问题吗? 任何帮助,将不胜感激。 提前致谢。

尝试的解决方案:我们尝试在每个服务中创建 http/https 连接代理,但仍然出现此问题。

更新:在 lb 日志中,api 已记录,但目标响应代码显示“-”,而 lb 响应代码显示 502 或 504。这是否意味着 lb 无法处理流量或我的应用程序?

还有可能的解决方案是什么?

我们遇到了同样的问题。

在我们的设置中,AWS 应用程序 ELB 的目标组包含 4 个 EC2 实例。 在每个 EC2 实例上,都有一个转发到 Tomcat 的 Apache2。

ELB 的默认连接 KeepAlive 为 60 秒。 Apache2 的默认连接 KeepAlive 为 5 秒。 如果 5 秒结束,Apache2 将关闭其连接并重置与 ELB 的连接。 然而,如果一个请求恰好在正确的时间到来,ELB 将接受它,决定将它转发到哪个主机,并且在那一刻,Apache 关闭连接。 这将导致上述 502 错误代码。

解决方案是:当你有级联代理/LB 时,要么对齐它们的 KeepAlive 超时,或者 - 最好 - 甚至让它们越长越长。

我们将 ELB 超时设置为 60 秒,将 Apache2 超时设置为 120 秒。 问题没了。

健康检查使用 HTTP2。 通过将http2添加到 listen 80,我使运行 NGINX 的 EC2 实例运行良好。

listen 80 default_server http2;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM