他の回答につきましては、Facebookの半正式な言葉は「吸う」です。彼らはcannot follow Crawl-delay(私はそれが "クローラ"ではないことを知っていますが、数秒で100ページを得ることはあなたがそれを呼びたいと思っています)クロールです。
自分の傲慢さに魅力を感じることができず、IPブロックをDROPすることはかなり厳しいですから、私の技術的な解決策はここにあります。
PHPでは、リクエストごとにできるだけ早く次のコードを実行してください。
define('FACEBOOK_REQUEST_THROTTLE', 2.0); // Number of seconds permitted between each hit from facebookexternalhit
if(!empty($_SERVER['HTTP_USER_AGENT']) && preg_match('/^facebookexternalhit/', $_SERVER['HTTP_USER_AGENT'])) {
$fbTmpFile = sys_get_temp_dir().'/facebookexternalhit.txt';
if($fh = fopen($fbTmpFile, 'c+')) {
$lastTime = fread($fh, 100);
$microTime = microtime(TRUE);
// check current microtime with microtime of last access
if($microTime - $lastTime < FACEBOOK_REQUEST_THROTTLE) {
// bail if requests are coming too quickly with http 503 Service Unavailable
header($_SERVER["SERVER_PROTOCOL"].' 503');
die;
} else {
// write out the microsecond time of last access
rewind($fh);
fwrite($fh, $microTime);
}
fclose($fh);
} else {
header($_SERVER["SERVER_PROTOCOL"].' 503');
die;
}
}
次のようなもので、コマンドラインからこれをテストすることができます。
$ rm index.html*; wget -U "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" http://www.foobar.com/; less index.html
改善提案は歓迎されている...私は巨大な爆発で彼らのかもしれないいくつかの同時実行の問題を推測します。
私たちのサイトでは、facebookボットが8月21日09:00 CETから負荷を分散し始めました。これ以上のバースト負荷はありません! –
ボットは8月7日に悪行を続けた:( –
関連、参照:http://stackoverflow.com/questions/7716531/facebook-and-crawl-delay-in-robots-txt – artlung