AWS elasticbeanstalk-access_log中出现神秘的Http 408错误

问题描述 投票:6回答:4

我们的AWS EBS实例中的elasticbeanstalk-access_log日志文件包含408个错误,如下所示:

172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:59 +0000] "-" 408 - "-" "-"

它们随机出现,有时它们之间有几分钟,有时在几秒钟内就会出现4-6个错误。当服务器上没有任何实际流量时,这些错误也会发生在我们的非公共登台环境中,因此这些请求的来源可能是AWS自己的服务之一。

http amazon-web-services elastic-beanstalk amazon-elb http-status-code-408
4个回答
5
投票

编辑:你有经典的负载均衡器吗?通过使用Elastic Beanstalk cli创建新环境并选择应用程序负载均衡器,更改为应用程序负载均衡器。这将解决这个问题。


ELB有一种称为预打开连接的机制。 ELB执行此操作以便可以更快地提供您的请求,即您的新请求不必在ELB等待在请求发送到后端之前打开与后端的新连接所需的额外时间。如果你有一个较低的保持活动超时,导致预先打开的连接被更快地关闭,这将使你的后端生成408错误响应,以指示连接已关闭,因为客户端(ELB)超时已到期而没有ELB发送任何请求在那个特定的连接上。

如果已修改ELB空闲连接超时,则需要确保http保持活动超时值大于ELB空闲连接超时值。如果不是这种情况,则启用保持活动超时并确保该值大于ELB空闲连接超时。

您可以通过使用以下代码在ebextensions文件夹中添加.config文件来更改apache中的keepalive超时:

files:
  "/etc/httpd/conf.d/keepalive.conf" :
  mode: "000644"
  owner: root
  group: root
  content: |
    # Enable TCP keepalive
    Timeout 300
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 300
    <IfModule mod_reqtimeout.c>
     RequestReadTimeout header=300 body=300
    </IfModule>

5
投票

我有类似的问题:AWS Elastic Beanstalk上的HTTP错误代码408。我必须实现的解决方案是将Classic LB本身的Instance端口和协议更改为80和HTTP。

最初,端口和协议都设置为443和HTTPS。因此,即使将LB端口和协议设置为443和HTTPS,也要确保将实例端口和协议设置为80。


1
投票

我们遇到了同样的问题,在this AWS forum thread底部提出的建议解决了这个问题。简而言之,您应该确保Elastic Loadbalancer上的空闲时间configured略低于为每个实例上运行的Apache httpd配置的空闲timeout


-4
投票

我在不同的环境中玩了几个小时的设置,这是解决方案:

当我关闭Configuration - > Load Balancing下的'Connection Draining'时,错误将从日志中消失。

这是最好的部分:当我再次打开连接排水时,错误没有回来!

所以似乎关闭它并在AWS Load-Balancer上工作(不仅仅在Windows上......)

© www.soinside.com 2019 - 2024. All rights reserved.