AWS上的504(网关超时)


504 (Gateway Timeout) on AWS

我的web应用程序在PHP中的AWS EC2实例上运行,我进行了一个大约需要5-10分钟的ajax调用,我在Google Chrome中看到了web控制台,我得到了这个504 (Gateway Timeout),我如何增加它的值,这与apache有关吗?感谢

ELB默认超时60秒;据我所知,没有办法延长这个限制,尽管这个页面表明亚马逊支持可以为你做一些事情(也提出了解决这个问题的方法):

点6)亚马逊ELB超时60秒(保持空闲)

亚马逊ELB当前超时持久套接字连接@60秒,如果是保持空闲。对于那些在后端EC2生成大文件(PDF、报告等),并将其作为响应并在整个生成过程中保持连接空闲过程为了避免这种情况,你必须在插座上发送一些东西每隔40秒左右,以在Amazon ELB中保持连接活动。注:我听说我们可以在向AWS支持团队。

编辑:正如下面的评论所指出的,截至2014年7月24日,这是可以在您的AWS控制台中配置的。

您是否尝试更改ELB上的超时?增加负载平衡器Atributes内的非活动限制连接。然后,您可以将默认限额从60更改为120。

这里有一个关于SO的相关问题。确保你正在做以下(从这个相关的问题):

  1. 我已经确认容器/吊舱正在运行
  2. 应用程序已启动,并且
  3. 如果我执行pod,那么我可以运行本地curl命令并获得响应从应用程序
  4. 我已经查看了入口吊舱上的日志,流量正在到达

这里和这里有一些有用的命令。

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

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

通常,在ELB的顶部有一个NGINX入口控制器,可以帮助将流量引导到您的服务。后者也有超时,通常为60秒。您需要按照此处指定的方式更改其超时。如果你使用地形,你可以在入口注释中指定它们(从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文件。新的限制应该适用。