在 ECS 中使用 Application Load Balancer 时出现 504 网关超时

504 Gateway Timeout using Application Load Balancer in ECS

在 ECS 上部署 Laravel Web 应用程序,以便启用自动缩放我正在使用 Application Load Balancer。在我引入重量级页面之前,该应用程序运行(并缩放)完美,大约一分钟后我开始收到 504 Gateway Timeout 错误。

我很确定单个 Web 服务器的超时时间更长(在本地测试应用程序时不会发生这种情况)所以问题一定与 AWS 环境(ECS/ALB)有关。

您可以在下面找到 ALB 设置的片段

AdminLoadBalancer:
  Type: AWS::ElasticLoadBalancingV2::LoadBalancer
  Properties:
    SecurityGroups:
      - !Ref 'AlbSecurityGroup'
    Subnets:
      - !Ref 'PublicSubnetAz1'
      - !Ref 'PublicSubnetAz2'
    Scheme: internet-facing
  Name: !Join ['-', [!Ref 'AWS::StackName', 'lb']]

经过一些尝试,我解决了设置负载均衡器idle timeout属性的问题,正如理论上here所解释的那样,因为单个ECS任务没有错。在Cloudformation中,加上参数的属性设置就可以了,默认值翻倍

AdminLoadBalancer:
  Type: AWS::ElasticLoadBalancingV2::LoadBalancer
  Properties:
    LoadBalancerAttributes:
      - Key: 'idle_timeout.timeout_seconds'
        Value: 120
    SecurityGroups:
      - !Ref 'AlbSecurityGroup'
    Subnets:
      - !Ref 'PublicSubnetAz1'
      - !Ref 'PublicSubnetAz2'
    Scheme: internet-facing
  Name: !Join ['-', [!Ref 'AWS::StackName', 'lb']]