在 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']]
在 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']]