Elasticbeanstalk 返回“504 网关超时”

Yeh*_*tan 1 go amazon-web-services node.js amazon-elastic-beanstalk

我的 API 中有一个端点,需要一些时间才能返回响应(>1 分钟)。

我已将 API 部署到 Elasticbeanstalk,现在当我尝试访问它时,我从 Nginx 收到 504 网关超时

<html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Yeh*_*tan 5

像您这样的超时错误理想情况下应该通过改进软件本身来修复,但如果由于任何原因无法完成,那么您可以增加 nginx 和负载均衡器的超时。

\n

在以前版本的 Amazon Linux 中,您需要使用自定义 nginx 配置在名为 .ebextensions 的目录中部署代码

\n

对于 Amazon Linux 2,事情完全相同,但略有不同,.ebextensions您需要使用.platform平台配置的文件夹,而不是使用 。

\n

因此,在您的应用程序的预期 ElasticBeanstalk 包中创建以下结构 -

\n
eb-package\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .ebextensions\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .platform\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 nginx\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 conf.d\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 timeout.conf\n
Run Code Online (Sandbox Code Playgroud)\n

并将以下内容添加到您的timeout.conf文件中

\n
proxy_connect_timeout 600;\nproxy_send_timeout 600;\nproxy_read_timeout 600;\nsend_timeout 600;\n
Run Code Online (Sandbox Code Playgroud)\n

您应该意识到,在某些情况下,您需要通过使用 AWS 控制台(在 EC2 下)手动配置负载均衡器或通过在负载均衡器中提供配置文件来增加负载均衡器的超时时间。.ebextensions时间

\n

例如(注意:此配置将根据您使用的负载均衡器类型而有所不同):

\n
eb-package\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .ebextensions\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .platform\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 nginx\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 conf.d\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 timeout.conf\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅经典负载均衡器与应用程序负载均衡器配置

\n

在 AWS 文档(2021 年 8 月 29 日)中,较新的 Application Load Balancer 没有默认超时。\nClassic Load Balancer 的超时为 60 秒。

\n

aws:elb:policies\nvs\naws:elbv2:loadbalancer

\n

欲了解更多信息,请参阅

\n\n