AWS Elastic Beanstalk 504网关超时

Jos*_*ana 8 amazon-web-services 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个字节的数据"以确保会话保持活动并且在一分钟后不会超时

asa*_* am 18

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

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

    option_settings:
      - namespace: aws:elb:policies
        option_name: ConnectionSettingIdleTimeout
        value: 300
    
    Run Code Online (Sandbox Code Playgroud)

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

    option_settings:
      - namespace: aws:elbv2:loadbalancer
        option_name: IdleTimeout
        value: 300
    
    Run Code Online (Sandbox Code Playgroud)
  • nginx的配置:设置Nginx的所述带超时的所需的值:send_timeout,proxy_connect_timeout,proxy_read_timeout, proxy_Send_timeout所有默认至60(附加规范,以检查可能是:client_header_timeout,client_body_timeout,keepalive_timeout).Nginx中的默认超时值在规范和配置文件中指定(例如,下面的.config文件/etc/nginx).在.ebextensions文件夹中创建一个新文件(或在上面的.config文件中更新),并在文件中追加以下内容(根据观察到的超时添加或删除相关设置):

    files:
      "/etc/nginx/conf.d/nginx.custom.conf":
          mode: "644"
          owner: "root"
          group: "root"
          content: |
            client_header_timeout   300;
            client_body_timeout     300;
            keepalive_timeout       300;
            send_timeout            300;
            proxy_connect_timeout   300;
            proxy_read_timeout      300;
            proxy_send_timeout      300;
    
    container_commands:
      01_restart_nginx:
        command: "sudo service nginx reload"
    
    Run Code Online (Sandbox Code Playgroud)

    还有几种方法可以添加此配置.在这里这里阅读更多.


小智 18

为了更新 Amazon Linux 2 平台上的 nginx 配置,我按照以下说明扩展 nginx 配置,成功地增加了超时限制: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms- linux-extend.html

/.platform/nginx/conf.d/myconf.conf:

client_header_timeout   300;
client_body_timeout     300;
send_timeout            300;
proxy_connect_timeout   300;
proxy_read_timeout      300;
proxy_send_timeout      300;
Run Code Online (Sandbox Code Playgroud)