我已经处理我的一台服务器上的一个问题有一段时间了。简而言之,服务器的负载急剧上升 - 高达 50 - 但网站几乎没有流量。我知道这可能是由于编码标准差、PHP 进程庞大和 MySQL 语句格式错误造成的,但网站 90% 的时间都正常运行。
我检查了高峰期的访问日志,发现很多时候是一些未知的网站爬虫试图同时加载一百万个页面并导致问题。
然而最近我收到的访问日志显示类似以下内容:
127.0.0.1 - - [13/Aug/2014:08:39:55 -0700] "GET /index.php HTTP/1.1" 200 20579 "-" "-"
其中没有用户代理字符串。我通常不会关心这一点,但这个未知的用户代理在几秒钟内请求了数百个页面,这些页面以 HTTP 200 开始,然后是 499 错误,随着服务器过载,会出现 502 和 503 错误。因此我无法在 robots.txt 或任何其他黑名单中阻止它,因为我没有可以列入黑名单/禁止的内容。
该堆栈是标准的 ubuntu、nginx、php-fpm、带有 Varnish 缓存的 MySQL。
有人知道这里发生什么事吗?