AWS Elastic Beanstalk 504网关超时

时间:2018-03-06 17:59:03

标签: amazon-web-services elastic-beanstalk amazon-elastic-beanstalk

我在AWS Elastic Beanstalk上运行了一个Node服务器。我的一个端点接受巨大的有效负载,功能本身非常慢而且冗长,并且可能需要10多分钟。

由于业务需求,它必须保留为单个HTTP POST,并且不能拆分为更小的。

在较大的通话中,我获得了504 GATEWAY TIMEOUT,总是在60秒左右。我尝试使用Elastic Beanstalk Load Balancer部分中的超时设置无效,似乎最长的超时持续时间是60秒。

我确实在https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html

的文档中看到了一个很有希望的解决方案
  

为了确保文件上传等冗长的操作有时间完成,请在每个空闲超时时间过去之前发送至少1个字节的数据

这听起来正是我需要的,但我不知道如何完成

1)如何从我的节点应用程序“发送至少1个字节的数据”以确保会话保持活动状态并且在一分钟后不会超时

1 个答案:

答案 0 :(得分:10)

可以通过设置ELB策略来解决ElasticBeanstalk环境上的504超时问题。也可能需要更新Nginx超时配置。

  • ELB策略:将Elastic Load Balancer的空闲超时设置为您选择的值(默认为60秒)。为此,请在项目的根目录中创建 .ebextensions 文件夹。在此文件夹中创建另一个带有 .config 文件扩展名的文件,并将ELB空闲超时设置为您选择的值(例如300秒):

    option_settings:
      - namespace: aws:elb:policies
        option_name: ConnectionSettingIdleTimeout
        value: 300
    

    或者如果您使用的是应用程序负载均衡器:

    option_settings:
      - namespace: aws:elbv2:loadbalancer
        option_name: IdleTimeout
        value: 300
    
  • Nginx配置:使用所需的超时值设置Nginx:send_timeoutproxy_connect_timeoutproxy_read_timeout, proxy_Send_timeout都默认为60s(要检查的其他规范可能是:{{ 1}},client_header_timeoutclient_body_timeout)。 Nginx中的默认超时值在specifications和配置文件中指定(例如keepalive_timeout下的 .config 文件)。在/etc/nginx文件夹中创建一个新文件(或在上面的.config文件中更新),并在文件中附加以下内容(根据观察到的超时添加或删除相关设置):

    .ebextensions

    还有几种方法可以添加此配置。阅读更多herehere