在没有请求或用户代理的情况下,我们的日志中出现 408 错误

在没有请求或用户代理的情况下,我们的日志中出现 408 错误

我收到很多类似这样的请求

www.example.com:80 10.240.1.8 - - [06/Mar/2013:00:39:19 +0000] "-" 408 0 "-" "-" -

似乎没有请求,也没有用户代理。有人见过这种情况吗?

答案1

您是否碰巧在 Amazon 的 Elastic Load Balancer 后面运行您的 Web 服务器?

它似乎由于健康检查,他们生成了大量 408 响应

该论坛主题中的一些解决方案:

  • RequestReadTimeout header=0 body=0

    如果请求超时,这将禁用 408 响应。

  • 将 ELB 健康检查更改为不同的端口。
  • 使用以下命令禁用 ELB IP 地址的日志记录:

    SetEnvIf Remote_Addr "10\.0\.0\.5" exclude_from_log
    CustomLog logs/access_log common env=!exclude_from_log
    

来自这篇博文

  • 将请求超时时间调整为 60 或以上。

答案2

这里已经有不少不错的答案了,但我想冒险补充一点尚未明确解决的问题。正如许多先前的评论者已经提到的那样,408 表示超时;在 Web 服务器上发生超时的情况有很多种。

话虽如此,在扫描服务器是否存在漏洞的多种情况下,都可能生成 408 错误。在这种情况下,客户端很少提供用户代理,并且经常突然结束连接,导致该连接中断,从而生成 408 错误。

例如,假设我是一个卑鄙的黑客,正在互联网上扫描仍然容易受到 POODLE 漏洞攻击的计算机。因此,我编写了一个脚本,该脚本打开与大量 IP 地址的连接以查找接受 SSL 版本 3 的服务器 - 稍后我将使用该列表专门扫描 POODLE 漏洞。第一个脚本所做的就是使用 openssl 建立连接以检查 SSLv3,如下所示:

openssl s_client -connect [IP]:443 -ssl3

在 Apache 的许多配置中,此命令将导致出现与您描述的完全相同的 408 消息。在我的两台服务器上执行此命令会导致访问日志中出现以下条目:

<remote IP address>  - - [04/Nov/2015:08:09:33 -0500] "-" 408 - "-" "-"

我想说清楚这一点,因为即使在 OP 没有使用任何形式的负载平衡的情况下,408 错误也可能发生在各种情况下 - 有些是恶意的,有些表示客户端出现问题,有些表示服务器出现问题。(我注意到 OP 提供的日志中本地 IP 被指示为远程 IP,但 OP 没有具体提到使用负载平衡器,所以我不确定 OP 是否只是为了演示而使用了不可路由的 IP,就像他对 URL 所做的那样)

无论如何,尽管我的帖子显然太晚了,无法帮助 OP,但希望它可以帮助其他来这里寻找解决所有这些该死的超时错误的方法的人。

答案3

有些东西连接到端口,但从未发送数据。HTTP 408 是“超时”错误。这里有一篇很好的说明: http://www.checkupdown.com/status/E408.html

答案4

我们遇到了这个问题,并且困惑了好久。我们想出的最佳解决方案是由 AWS 支持的 ELB 团队建议的。它本质上取决于确保您的 httpd 服务器的超时设置都大于您的 ELBidle timeout设置(默认为 60 秒)。

  • 确保您的 apacheTimeout指令值是idle timeoutELB 设置的两倍。
  • 打开该KeepAlive功能,确保MaxKeepAliveRequests非常大(0 表示无限,或非常高,如 2000),并且KeepAliveTimeout大于您的 ELB idle timeout

我们发现KeepAlive(和相关设置)设置专门将 408 的数量减少到实际上为 0(我们看到一些,但非常少)。

相关内容