Webクローラーのスロットル


8

私のウェブサイトはGoogleウェブスパイダーによってDoSされています。Googleはサイトのインデックス登録を歓迎しますが、ウェブサーバーが結果を生成するよりも速くサイト上のタグクラウドにクエリを実行し、ウェブサーバーのリソースを使い果たすことがあります。

通常の訪問者が影響を受けないようにWebサーバーへのアクセスを制限するにはどうすればよいですか?

robots.txtは、サイト全体のインデックス作成をブロックするため、オプションではありません。

iptables -m recent 一部のページには多くの画像やその他のデータファイルがあり、それらにも「最近」のトリガーがあるため(通常、私のRSSアグリゲーター、画像とフィードの読み込み)、トリッキーです。

iptables -m limit 同じ欠点があり、それに加えて、IP送信元アドレスごとに選択することができませんでした。

サーバーの負荷が高くなりすぎる訪問者を制限するにはどうすればよいですか?

私はVirtualBox VMのUbuntuサーバーでapache2を実行しています。


1
ウェブマスターツールを使用して、クロール頻度を下げることができます。support.google.com/webmasters/bin/…を
derobert

回答:


5

mod_qos Apacheモジュールを試してください。現在のバージョンには以下の制御メカニズムがあります。

  • ロケーション/リソース(URL)または仮想ホストへの同時リクエストの最大数。
  • URLへの1秒あたりのリクエストの最大許容数、または1秒あたりのダウンロードされたキロバイトの最大/最小などの帯域幅の制限。
  • 1秒あたりのリクエストイベント数を制限します(特別なリクエスト条件)。また、制限なしまたは制限なしでWebサーバーにアクセスする可能性のある非常に重要な人物(VIP)を「検出」することもできます。
  • 不正な操作を拒否するための一般的なリクエストラインとヘッダーフィルター。
  • 本文データの制限とフィルタリングを要求します(mod_parpが必要)。
  • TCP接続レベルの制限。たとえば、単一のIP送信元アドレスまたは動的キープアライブ制御からの許可される接続の最大数。
  • サーバーが空きTCP接続を使い果たしたときに、既知のIPアドレスを優先します。

ドキュメントからのこのサンプルの条件付きルールにより、正しい方向に進むことができます。

# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch             "slurp"                  QS_Cond=spider
BrowserMatch             "googlebot"              QS_Cond=spider

# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch       "^(/app/b/|/app/c/).*$"  300
QS_CondLocRequestLimitMatch   "^(/app/b/|/app/c/).*$"  10   spider

金曜日の夜にベルギーのビールを楽しんでいたいと思っていたよりも少し複雑に見えます...明日はそれを見る必要があります。browsermatchと物事で有望に見えます。...それを考えるために来ることはいいだろうもしそれが自動的に任意のホスト/ユーザエージェントその要求robot.txt:O)のthnx Uther
jippie

そのビールをお楽しみください!
ジョージM

OK、とてもシンプルに見えます。それを実装して、私のWebサーバーが今も維持できるかどうかを確認します。
ジッピー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.