過剰アクセスするクローラーを制限する

レンタルサーバーの軽さを保つ

ホームページを閲覧しているのは人だけではありません。クローラーと称される巡回プログラムも、情報収集などの目的でアクセスしてきています。

Google や Yahoo! などの検索エンジンが走らせているクローラーは、収集した情報を使った検索結果からユーザーを送り込んでくれる恩地があります。しかし、そういった利点がないばかりか嫌がらせのように過剰にアクセスしてきてサーバーに負荷を掛けるクローラーも少なくはありません。

過剰アクセスするクローラーのせいでCGI を使った動的生成ページで503エラーが起きたり、無駄に転送量が増えてレンタルサーバーの制限をオーバーしてしまうなどの支障を来たすこともあります。

もしも悪質なクローラーに狙われたら、サーバーの貴重なリソースを守るために、.htaccess を利用して迷惑なアクセスを遮断しましょう。

拒否するホストをmod_accessで制御する.htaccess

SetEnvIf User-Agent "ExampleBot1" ng_bot
SetEnvIf User-Agent "ExampleBot2" ng_bot
order allow,deny
allow from all
deny from env=ng_bot
deny from 123.456.78.90

オレンジ色の部分を制限したい条件に合わせ書き換えて使います。環境変数の名前(サンプルでは"ng_bot")は任意に設定できます。

アクセス制限したいクローラーのユーザーエージェント名を SetEnvIf で環境変数に設定して、Deny でそれらのアクセスを拒否します。制限したいクローラーの数だけ SetEnvIf を繰り返して設定します。

ユーザーエージェントではなく IP で制限したい場合は最終行のように指定します。制限する IP がないならば、この行は必要ありません。


アクセスを制限しても、その処理でオーバーヘッドが生じます。できれば迷惑なクローラーからのアクセスそのものを減らすのがベストです。

通常ならばクローラーがアクセスすることを robots.txt を使って事前に制限できるのですが、サーバーに高負荷を掛けるようなクローラーは得てして robots.txt を読みません。とはいえ、ある日突然 robots.txt に従うようになることもあるので robots.txt へのアクセスだけは許可しておくと、より負荷を低減できる可能性があります。

SetEnvIf User-Agent "ExampleBot" ng_bot
order allow,deny
allow from all
deny from env=ng_bot
<Files robots.txt>
order deny,allow
allow from all
</Files>

ディレクティブの適用をファイル名で制限する<Files>を使い robots.txt のみアクセス許可して、別途 robots.txt でもクローラーを制限しておきます。

拒否するホストをmod_rewriteで制御する.htaccess

mod_rewrite が使えるレンタルサーバーならば、より高度な条件を設定してアクセス制限が行えます。

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ExampleBot1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ExampleBot2 [NC,OR]
RewriteCond %{REMOTE_ADDR} ^123\.456\.78\.90
RewriteCond %{REQUEST_URI} !/robots\.txt$
RewriteRule ^.*$ - [F,L]

オレンジ色の部分を制限したい条件に合わせ書き換えて使います。正規表現が使えるので、自由度の高い設定ができます。robots.txt を除外している行には OR ではなく AND でつなげる必要があります。例えば、制限する IP がない場合は下記のようになります。

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ExampleBot1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ExampleBot2 [NC]
RewriteCond %{REQUEST_URI} !/robots\.txt$
RewriteRule ^.*$ - [F,L]

利用したディレクティブの解説表

最後に本稿で利用したディレクティブの解説表を掲載します。更なる情報が必要な場合はApache HTTP ドキュメントを参照してください。

mod_access の解説表
機能
Allowアクセスを許可するホストを制御する。
Denyアクセスを拒否するホストを制御する。
Orderデフォルトのアクセス可否状態と、Allow と Deny が評価される順番を制御する。
mod_rewrite の解説表
機能
RewriteEnginemod_rewrite を有効(on)もしくは無効(off)にする。
RewriteCond続く RewriteRule を実行する条件を定義する。
RewriteRule書き換えのルールを定義する。
%{変数名}サーバー変数。
[NC]大文字と小文字を区別しないで判定する。区別したい場合は指定しません。
[OR]続く条件と結合する。指定しないと AND(論理積)になります。
[F]アクセスを禁止する。 HTTP レスポンスに"403 Forbidden"を返します。
[L]書き換え処理を終了して、以降の RewriteRule を適用しない。
-置換をしないで条件のマッチングだけを行なう。
!NOT 文字。後続の条件を否定する。
正規表現の解説表
機能
.任意の一文字。
*直前の文字の0回以上の繰り返し。
^文字列の先頭。
$文字列の末尾。
\続く特殊文字をエスケープする。
前の記事:
幽玄の美
次の記事:
スタイルシートでお手軽に

カテゴリー

サイト内検索

おすすめアイテム

ページの先頭へ戻る