【问题标题】:AWS EBS runs into "504 Gateway Time-out"AWS EBS 遇到“504 网关超时”
【发布时间】:2021-02-16 05:27:15
【问题描述】:

我是使用 AWS EBS 和 ECS 的新手,所以如果我提出对其他人来说可能很明显的问题,请多多包涵。问题:

我有一个在 EBS 上运行的单容器 Node/Express 应用程序。本地 docker 容器按预期工作。在 EBS 上,我可以访问 API 的一个端点并获得预期的输出。对于运行时间更长(大约 10-15 秒)的第二个端点,我没有得到任何响应,并在 60 秒后运行超时:“504 Gateway Time-out”。

我想知道如何进行调试,因为我无法直接连接到容器?目前包含的代码中没有任何调试功能,因为我不确定 EBS 容器的最佳节点方法是什么 - 任何建议都非常感谢。

提前谢谢你!

【问题讨论】:

  • 为什么连接不上EB实例?第二个端点是什么意思?哪个端点?
  • 嘿,Marcin,我的端点是指一个 Restful API 端点——有点像应用程序中的一个页面。该应用程序有两个:一个可以正常工作且没有任何问题的简单应用程序,另一个更复杂的应用程序会因任何原因而失败。所以容器本身可以工作。连接到 EB 实例是什么意思?登录容器?不知道该怎么做。
  • 是的,您可以通过 ssh 进入实例,并从内部检查您的 contains 是否有效,端点是否使用 curl 响应。
  • 好吧,我不知道如何通过 ssh 进入它。只是 ssh URL 不起作用 - 我什至还没有在任何地方定义 SSH 密钥。你能指出我正确的方向吗?

标签: node.js amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

您可以在您的 AWS 中查看在 EBS 上运行的 EC2 实例,并且您可以选择在您的 EBS 选项中为它们提供 IP 地址。如果需要,这将使您可以直接通过 SSH 连接到它们。

否则请检查服务器中的 keepAliveTimeout 字段(您正在使用 express 的 app.listen() 返回的值)。

当我的节点服务器超时小于负载平衡器超时时,我得到了相当数量的 504。

【讨论】:

  • 嘿亚当,我已经添加了keepAliveTimeout(和headersTimeout),这里推荐shuheikagawa.com/blog/2019/04/25/keep-alive-timeout 61 秒和65 秒。相同的行为。我在 AWS 仪表板上找不到查看 IP 的位置 - 用户界面非常混乱。
  • 您必须在 EBS 中设置选项才能让您的 EC2 实例拥有公共 IP。我不记得该配置选项在哪里,但我认为它与您选择安全组和 VPC 的位置相同。抱歉,这不是超时问题,那将是一个不错的简单解决方案!
  • 据我所知,我没有运行明确的 EC2 实例 - 只是一个带有 EBS 的 docker 容器。确定下面有一台机器,但我能弄到吗?
  • 在幕后,EBS 在 EC2 上运行。您应该能够在 EC2 面板中看到这些实例(而不是在 EBS 界面中)。
  • 有趣 - 我在该区域看不到任何资源:资源显示全部为零,安全组除外。
【解决方案2】:

您的应用程序需要比预期更长的时间(> 60 秒)来响应,因此 nginx 或负载均衡器会终止您的请求。

看我的回答here

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2013-12-03
    • 2018-08-14
    • 2013-05-20
    • 2020-08-07
    • 2011-08-30
    • 2017-04-30
    • 2019-08-30
    相关资源
    最近更新 更多