検索ロボット(クローラ)拒否で負荷軽減
レンタルサーバーで、案外、負荷がかかりやすいのが検索ロボットです。
特に悪評高い「百度」(Baidu)は、やたらとサイト情報を採取しに来ます。
サイトの大きさに比例して「百度」(Baidu)のアクセス数も増えてくるのが知られています。
もし、あなたのサイトが、中国に一切関係ないのであれば、拒否するのも一つの案かもしれません。
特にWordpress,Joomla!などPHPで動的にページを作成する場合は、負荷の軽減が望まれるでしょう。
今回は、その方法を説明してみます。
検索ロボット(クローラ)拒否する方法
検索ロボット(クローラ)拒否する方法は、大きく2つあります。
・robots.txtを使ったクロール拒否
・.htaccessを使ったクロール拒否
以降、その具体的な方法について簡単に解説します。
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: /
|
筆者は、この設定を行って、1週間経ちましたが、ユーザエージェントを変え、IPアドレスを変えながら、アクセスは、全く止まることはありませんでした。
つまり、「百度」(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)などのクローラがデータベースへのアクセスリソースを占有してしまっている場合もあります。
一度、試されるのも
有りだと思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事
口コミ・評判
口コミ・評判を投稿 :