我正在使用 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”,使用不同的浏览器等。