AWS上的504(网关超时)错误

13

我在 AWS EC2 实例上运行我的 PHP Web 应用程序,然后进行一个约 5-10 分钟的 ajax 调用,在 Google Chrome 的 Web 控制台中看到 504 (网关超时) 错误。我该如何增加这个值?这是否与 Apache 有关?


504消息是在Apache、PHP还是某种负载均衡器/CDN中产生的?您的phpinfo()旁边显示了什么“服务器API”? - TML
如果您正在通过PHP运行调用,则需要增加php.ini中的最大执行时间(http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time)。 - Mat Carlson
@TML 我强烈认为这是由于 ELB 导致的,但不确定如何解决。 - user1765876
1
@matcarlson,它在ELB中是因为一旦我使用实例URL,该ajax调用就可以正常工作。 - user1765876
3个回答

15

默认情况下,ELB(弹性负载均衡)会在60秒后超时;我不知道有什么方法可以延长此限制,尽管此页面建议亚马逊支持团队可以为您执行操作(并且还提供了解决问题的方法):

第6点)Amazon ELB在空闲状态下超时时间为60秒

如果 Amazon ELB 在空闲状态下保持超过60秒,则当前会超时持久套接字连接。此情况将对生成大型文件(PDF、报告等)并将其作为响应发送回端口 EC2 并在整个生成过程中保持连接空闲的用例造成问题。为避免此情况,您需要每40秒左右在套接字上发送一些内容,以使连接在 Amazon ELB 中保持活动状态。注意:据我所知,在向 AWS 支持团队说明情况后,我们可以扩展此值。

编辑:正如下面的评论者所指出的,从2014年7月24日开始,您可以在 AWS 控制台中对此进行配置。


2
我以前通过提前询问成功延长了ELB超时限制。值得确认的是(这样您就可以传达给AWS工程师),您的后端是否具有比您想要增加ELB超时时间更长的超时时间。 - Jeff Sisson
@JeffSisson 他们将其延长到20分钟,但如果请求超过20分钟怎么办? - user1765876
1
如果一个请求花费了那么长时间,你可能做错了什么。开始使用消息队列吧。 - datasage
1
是的,你需要研究一些异步操作,其中排队是一般类别。重型操作不应在请求上执行。 - Jeff Sisson
14
现在可配置闲置超时!http://aws.amazon.com/about-aws/whats-new/2014/07/24/elastic-load-balancing-now-supports-idle-timeout-configuration/ - Elad Nava

0

SO上有一个相关的问题在这里。 请确保您按照以下步骤操作(从这个相关问题开始):

  1. 我已确认容器/ Pod 正在运行,
  2. 应用程序已启动,
  3. 如果我执行 pod,然后我可以运行本地 curl 命令并从应用中获取响应。
  4. 我已检查了进入 pod 上的日志,并且流量正在到达。

一些有用的命令 在这里 在这里

下一步是增加 ELB 空闲时间,如前面的答案所述。 如果您使用 terraform,则可以在 ingress 的注释中使用:

"alb.ingress.kubernetes.io/load-balancer-attributes" = "idle_timeout.timeout_seconds=600"

通常在ELB之上有一个NGINX ingress控制器,它帮助将流量引导到您的服务。 后者也有超时时间,通常为60秒。 您需要根据此处指定的要求更改其超时时间。 如果您正在使用terraform,可以在您的ingress注释中指定它们,如下所示(将超时时间从60秒更改为300秒):
  "nginx.ingress.kubernetes.io/proxy-connect-timeout" = "10"
  "nginx.ingress.kubernetes.io/proxy-send-timeout" = "300"
  "nginx.ingress.kubernetes.io/proxy-read-timeout" = "300"

你可以按照链接2和3中的说明进入你的ingress控制器,并检查你的nginx.conf文件。新的限制应该已经生效。


0
你尝试过更改 ELB 的超时时间吗? 在负载均衡器属性中增加不活动限制连接。然后,您可以将默认限制从60更改为120。

2
这已经被其他答案建议过了,有什么新的吗? - Vega

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接