AWS上的504(网关超时)

时间:2013-11-19 22:41:48

标签: php ajax apache amazon-ec2 timeout

我的网络应用程序在PHP上的AWS EC2实例上运行,我进行了大约5-10分钟的ajax调用,我在Google Chrome中看到了Web控制台,我得到了这个504 (Gateway Timeout),我怎么能增加这个值,是否与apache有关? 感谢

3 个答案:

答案 0 :(得分:12)

ELB默认超时60秒;虽然this page表明亚马逊支持可以为您做的事情(并且还提出了一种解决问题的方法),但我并不知道如何扩展此限制:

  

第6点)亚马逊ELB超时为60秒(保持闲置状态)

     

亚马逊ELB   目前超时持久套接字连接@ 60秒(如果是)   保持闲置。这种情况对于用例来说是一个问题   在后端EC2生成大文件(PDF,报告等),将它们发送为   响应并在整个生成期间保持连接空闲   处理。为了避免这种情况,你必须在套接字上发送一些东西   每隔40秒左右,以保持Amazon ELB中的连接活动。   注意:我听说在解释案例之后我们可以扩展这个值   AWS支持团队。

编辑:正如下面的评论者指出的那样,从July 24th, 2014起,这可以在您的AWS控制台中进行配置。

答案 1 :(得分:0)

您是否尝试过更改 ELB 的超时时间? 增加负载均衡器属性内的不活动限制连接。然后您可以将默认限制形式 60 更改为 120。

答案 2 :(得分:0)

SO here 上有一个相关问题。 确保您正在执行以下操作(来自此相关问题):

<块引用>
  1. 我已确认容器/pod 正在运行,
  2. 应用程序已启动并且
  3. 如果我执行到 pod 中,那么我可以运行本地 curl 命令并获得响应 来自应用程序。
  4. 我检查了入口 Pod 上的日志,流量正在到达

herehere 的一些有用命令。

下一步是增加 ELB 空闲时间,如上一个答案中所述。 如果您使用 terraform,您可以在入口的注释中使用:

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

通常在 ELB 之上有一个 NGINX 入口控制器,帮助将流量引导到您的服务。 后者也有超时,通常是 60 秒。 您需要按照指定的 here 更改其超时时间。 如果您使用 terraform,您可以像这样在入口注释中指定它们(将它们从 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 中的说明进入您的入口控制器并检查您的 nginx.conf 文件。应该应用新的限制。