検索ロボット(クローラ)拒否で負荷軽減
レンタルサーバーで、案外、負荷がかかりやすいのが検索ロボットです。
特に悪評高い「百度」(Baidu)は、やたらとサイト情報を採取しに来ます。
サイトの大きさに比例して「百度」(Baidu)のアクセス数も増えてくるのが知られています。
もし、あなたのサイトが、中国に一切関係ないのであれば、拒否するのも一つの案かもしれません。
特にWordPress,Joomla!などPHPで動的にページを作成する場合は、負荷の軽減が望まれるでしょう。
今回は、その方法を説明してみます。
robots.txtを使ったクロール拒否
普通のクローラは、robots.txtの設定に従ってくれます。
robots.txtには、以下の情報を設定します。
User-Agent:ユーザエージェント名
Disallow: 拒否するディレクトリ名
以下は、その設定例です。
1 2 3 4 5 6 7 8 | User-Agent: Baiduspider Disallow: / User-Agent: Baiduspider+ Disallow: / User-Agent: BaiduImagespider Disallow: / User-Agent: BaiduMobaider Disallow: / |
つまり、「百度」(Baidu)は、表面的に従っているふりはしますが、全くアクセスを止めることはありません。残念ながら。
.htaccessを使ったクロール拒否
ある意味では、.htaccessを使える共有レンタルサーバーの環境では、最後の手段になります。
.htaccessファイルは、このファイルを置いたディレクトリとその配下のサブディレクトリのアクセス制限を設定することができます。
ほとんどの場合、httpd.confで設定できるディレクトリのアクセス制限が、そのまま、.htaccessファイルに記述することができます。
以下は、その設定例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # BEGIN crawler SetEnvIf User-Agent "[Bb]aidu" deny_ref SetEnvIf User-Agent "[Yy]eti" deny_ref SetEnvIf Referer "^http://www\.baidu\.jp" deny_ref SetEnvIf Referer "^http://www\.baidu\.com" deny_ref SetEnvIf Referer "^http://help\.naver\.com" deny_ref SetEnvIf Remote_Host "\.baidu\.jp" deny_ref SetEnvIf Remote_Host "\.baidu\.com" deny_ref SetEnvIf Remote_Host "\.hinet\.net" deny_ref SetEnvIf Remote_Host "\.naver\.com" deny_ref order allow,deny allow from all deny from env=deny_ref ############## # robots.txt # ############## <Files robots.txt> allow from all </Files> # END crawler |
SetEnvIf は、以降に記述する条件に一致した場合、env(グローバル変数のようなもの)に指定された値を設定します。
| 2行目は、 | User-Agentの名前が、Baidu あるいは baidu を含んでいるならdeny_refをenvに設定します。 |
| 3行目は、 | User-Agentの名前が、Yeti あるいは yeti を含んでいるならdeny_refをenvに設定します。 |
| 4行目は、 | Refererの名前が、http://www.baidu.jpで始まる場合deny_refをenvに設定します。 |
| 5行目は、 | Refererの名前が、http://www.baidu.comで始まる場合deny_refをenvに設定します。 |
| 6行目は、 |
Refererの名前が、http://help.naver.comで始まる場合deny_refをenvに設定します。 — これは、NHN Corp.という「百度」(Baidu)とは異なりますが、韓国系の検索エンジンのクローラです。これまた、かなり頻繁にクロールしに来ます。ここで同じように拒否してみます。 |
| 7行目は、 | Remote_Hostの名前が、baidu.jpドメインからのアクセスの場合deny_refをenvに設定します。 |
| 8行目は、 | Remote_Hostの名前が、baidu.comドメインからのアクセスの場合deny_refをenvに設定します。 |
| 9行目は、 | Remote_Hostの名前が、hinet.netドメインからのアクセスの場合deny_refをenvに設定します。 |
| 12行目は、 | ここからアクセス規制を許可(allow)、拒否で指定します。(deny) |
| 13行目は、 | まず、すべてのアクセスを許可します。 |
| 14行目は、 | アクセスの中で、envにdeny_refを設定されるようなアクセスの場合、そのアクセスを拒否します。 |
| 19-21行目は、 | robots.txtファイルだけは、だれでもアクセスできるようにします。 |
また、通常のアクセスロギングには、403で拒否された情報が残ります。
[エラーロギング]
[Sat May 08 15:41:01 2010] [error] [client 119.63.198.26] client denied by server configuration: /var/www/html/wordpress/
[アクセスロギング]
119.63.198.26 - - [08/May/2010:15:41:01 +0900] "GET / HTTP/1.1" 403 214 "-" "Baiduspider+(+http://www.baidu.jp/spider/)"
この設定で、負荷が大きくてアクセスエラー(500,503)がでているような場合は、その頻度が減ると思います。
少なくとも筆者は、データベースアクセスエラーは、減りました。
どうしても共有レンタルサーバーの場合は、データベースへの同時接続できる数には、限界があります。「百度」(Baidu)などのクローラがデータベースへのアクセスリソースを占有してしまっている場合もあります。
一度、試されるのも有りだと思います。
独自ドメインが使える格安レンタルサーバーなら
- 何といても安い!ハッスルサーバー
- 安定感抜群のさくらインターネット(スタンダード)
- 早さと容量のさくらインターネット(プレミアム)
がおすすめです。
このお値段でMySQLもphpも動かせますから、とりあえず、自分のサイトを作ってみたい方には、おすすめです。
この記事を読んだ人は次の記事も読んでいます:

口コミ・評判
口コミ・評価を投稿 :