我正在管理一个拥有数百个网站的专用服务器,其中有一个 Apache 的主日志。
该服务器每隔 4 或 5 个小时就会出现一次 Apache CPU 使用率高峰,经过检查,我在 Apache access_logs 中发现如下行:
128.223.8.111 - [15/Jul/2015:02:36:09 +0100] "HEAD / HTTP/1.1" 159855ms 400 - "-" "-"
160.36.57.172 - [15/Jul/2015:02:57:21 +0100] "HEAD / HTTP/1.1" 105350ms 400 - "-" "-"
142.103.2.2 - [15/Jul/2015:03:45:29 +0100] "HEAD / HTTP/1.1" 130384ms 400 - "-" "-"
对应于 error_logs 中的这些
[Wed Jul 15 02:36:09 2015] [error] [client 128.223.8.111] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
[Wed Jul 15 02:57:21 2015] [error] [client 160.36.57.172] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
[Wed Jul 15 03:45:29 2015] [error] [client 142.103.2.2] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
现在我想追踪它们并找出它们是如何发生的。从错误日志中我了解到有人试图在不选择主机名的情况下访问服务器,但我不明白这是怎么可能的。
在同一行上 105~159 秒是很多的,但我不确定这些代表什么,因为它没有访问任何 php 文件所以它不是执行时间,所以我该如何限制它们。
任何关于如何查找原因的提示都将受到赞赏。
答案1
很简单,有人访问http://ip.add.re.ss
。这将检索没有主机名的页面。
您可以在 Apache 中创建一个默认虚拟主机,向访问者返回 404,以最大限度地减少这些请求的影响。