gpt4 book ai didi

amazon-web-services - AWS ALB 在运行 express/nginx 的 ECS 服务前出现间歇性 502 网关错误

转载 作者:行者123 更新时间:2023-12-04 10:59:13 25 4
gpt4 key购买 nike

背景:

我们正在运行一个单页应用程序,该应用程序通过 nginx 提供服务,节点 js (v12.10) 后端运行 express。它通过 ECS 作为容器运行,目前我们正在运行三个 t3a 介质作为我们的容器实例,其中每个 api 和 web 服务在这些介质上运行 6 个副本。我们使用 ALB 来处理请求的负载平衡/路由。我们在 3 个可用区运行三个子网,负载均衡器与所有三个子网相关联,实例也分布在 3 个可用区。

问题:

我们正试图找出前端和后端出现的一些间歇性 502 错误的根本原因。我已经下载了 ALB 访问日志,所有这些请求的有趣之处在于它们都显示以下内容。- 请求处理时间:0.000- target_processing_time:0.000(有时为 0.001 或最多 0.004)- 响应处理时间:-1

在出现这些错误时,我可以看到有可用的健康目标。

现在我知道有些人遇到过这样的问题,服务器端的 keepAlive 时间比 ALB 端的时间短,因此连接被强制关闭,ALB 然后尝试重用(这符合AWS 故障排除指南)。然而,当查看我们后端的 keepAlive 时间时,它们设置为比我们当前的 ALB 高两倍。此外,请求本身可以通过 chrome 开发工具重播并且它们成功了(我不确定这是否是检查格式错误请求的有效方法,这似乎是合理的)。

我是这个领域的新手,如果有人对在哪里查看或运行什么样的测试有一些建议可以帮助我查明这个问题,我将不胜感激。我在某些端点上运行了一些负载测试并复制了 502 错误,但是重负载下的错误与我在日志中看到的间歇性错误不同,因为 target_processing_time 非常高,所以在我看来这完全是另一个问题。在这个阶段,我想了解显示 target_processing_time 基本上为零的错误。

最佳答案

一年多前我写了一篇关于这个的博客文章,可能值得一看(由于 NodeJS 8+ 中的行为变化):

https://adamcrowder.net/posts/node-express-api-and-aws-alb-502/

TL;DR 是您需要将 nodejs http.Server keepAliveTimeout(以毫秒为单位)设置为高于负载均衡器的空闲超时(以秒为单位)。

另请注意,还有一个叫做 http-keepalive 的东西可以设置一个 http header ,这与这个问题完全无关。确保设置正确。

另请注意,目前在 nodejs 中存在回归,其中设置 keepAliveTimeout 可能无法正常工作。正在此处跟踪该错误:https://github.com/nodejs/node/issues/27363如果您仍然遇到此问题,值得一读(您可能还需要设置 headersTimeout)。

关于amazon-web-services - AWS ALB 在运行 express/nginx 的 ECS 服务前出现间歇性 502 网关错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58945020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com