11

我们的 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 自己的服务之一。

4

5 回答 5

12

我遇到了类似的问题:AWS Elastic Beanstalk 上的 HTTP 错误代码 408。为了解决这个问题,我必须实施的解决方案是将 Classic LB 本身的实例端口和协议更改为 80 和 HTTP。

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

于 2018-06-27T16:26:49.477 回答
8

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


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

如果你修改了 ELB 空闲连接超时,那么你需要确保你的 http keep-alive 超时值大于 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>
于 2017-11-11T10:58:20.653 回答
1

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

于 2016-04-23T23:09:46.160 回答
0

这可能是因为实例 keepalaive 超时比负载均衡器短。它必须比负载均衡器的空闲超时长几秒钟,这样才能在您的 .ebextensions 文件夹中创建配置,并使用此内容替换“YOUR-TIME”,时间长于您的实例负载均衡器的超时时间:

files:
  "/etc/httpd/conf.d/mod_reqtimeout.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      <IfModule reqtimeout_module>
        RequestReadTimeout header=YOUR-TIME,MinRate=500 body=YOUR-TIME,MinRate=500
      </IfModule>
于 2020-02-05T14:41:56.723 回答
-5

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

当我在配置 -> 负载平衡下关闭“连接耗尽”时,错误从日志中消失了。

最好的部分来了:当我再次打开 Connection Draining 时,错误并没有出现!

所以似乎关闭和打开它也可以在 AWS Load-Balancer 上工作(不仅在 Windows 上......)

于 2016-03-23T09:58:30.570 回答