为什么页面加载时间较短时错误日志中会出现“请求头读取超时”消息?

为什么页面加载时间较短时错误日志中会出现“请求头读取超时”消息?

我正在使用 Apache 2.4.10 和 运行 Rails 应用程序mod_passenger。该站点仅使用 https。我在错误日志中看到以下消息:

[Wed May 31 19:05:37.528070 2017] [reqtimeout:info] [pid 11111] [client 10.100.23.2:57286] AH01382: Request header read timeout  
[Wed May 31 19:05:37.530672 2017] [reqtimeout:info] [pid 11229] [client 10.100.23.2:57288] AH01382: Request header read timeout  
[Wed May 31 19:05:37.890259 2017] [reqtimeout:info] [pid 10860] [client 10.100.23.2:57271] AH01382: Request header read timeout  
[Wed May 31 19:05:37.890383 2017] [reqtimeout:info] [pid 10859] [client 10.100.23.2:57272] AH01382: Request header read timeout  
[Wed May 31 19:05:37.890459 2017] [reqtimeout:info] [pid 10862] [client 10.100.23.2:57285] AH01382: Request header read timeout  
[Wed May 31 19:05:37.947942 2017] [reqtimeout:info] [pid 10863] [client 10.100.23.2:57287] AH01382: Request header read timeout 

这些消息在我的页面加载结束后大约两到三秒出现在错误日志中。但是,完整的页面加载仅需几秒钟。我使用mod_reqtimeout此设置:

RequestReadTimeout header=20-40,minrate=500

由于页面加载仅需几秒钟,我不明白为什么Request header read timeout消息会被记录到错误日志中。

为什么会出现这些消息?我该如何补救?

答案1

您确定您是“10.100.23.2”吗?

您可能已经知道,reqtimeout 是为了防止 Slow Loris 攻击,即保持连接打开而不发送任何实际数据的请求。

在这种情况下,这些连接在 20 秒后不会发送任何标头,因此 Apache 最终关闭它们。

它很可能是您最喜欢的浏览器发送数以亿计的连接来获取内容,而只使用几个,尝试使用一些更简单的客户端浏览器,例如“curl”,使用不同的浏览器等。

相关内容