クローラーからのアクセスをNginxとrobots.txtを使って制限する方法(Baiduさんがんばりすぎです)

やたら運営しているサイトが重いなと思っていて、人気が出てきたのかしらとおもったら、


BaiduさんのクローラーBaiduspider+)さんが、ものすごい勢いでアクセスしていらっしゃる。


クローラーさんからのアクセスだけで3,000円以上使ってるかも。。。ガーン。
給料日までお昼は菓子パンかも。


これを機にNginxとrobots.txtを使って、クローラーのアクセス制限を行うことにしました。

俺のロードバランサとウェブ間の転送量が半端ないわけない

最近の外側のロードバランサと内側のウェブサーバの転送量が半端ない。

人気が出てきたのかな。うぷぷぷ、と思ったら全くのKAN-CHI-GUY!
検索クローラーばっかりに人気が出てきてる!毎秒アクセスご苦労様です。。

うーん検索エンジンに載せてもらえるのはありがたいんだけど、ちょっと頻度が多すぎる。

少しはお行儀良くお願いしたいところ。


クラウドRackspaceの転送量考察

利用しているRackspaceのレポートなどを見てみると、、、

Server Disk Space (GB) Bandwidth In (GB) Bandwidth Out (GB) Total Uptime Running Charges
LB 10 2.24 58.38 29 Day(s) 21:13:38 $18.64
Web 20 58.97 1.47 29 Day(s) 21:13:28 $22.55
DB 10 2.87 1.23 29 Day(s) 21:13:33 $9.25
Dev 10 14.02 2.25 29 Day(s) 21:13:44 $8.35

注:LB:ロードバランサ、WEB:ウェブサーバ、DB:データベースサーバ、Dev:開発用サーバ


となっている。29日の間にロードバランサとウェブサーバでの転送量が多く、実に58GBも転送されている。。。うーむ、まだ全公開していないサイトなのに、結構転送してるなぁ。41.14ドル(83円換算で3,414円)もかかってる。


クローラーさん対策1:Nginxの設定

と、いうことで検索エンジンクローラーさんに対しては、サーバの増強等を行うまでは、
一定の制限をかけることにしました。

ロードバランサに問い合わせがきたら、サーバ内のrobots.txtを見て、
検索エンジンの調整を促す方式にした。(外部にリダイレクトすると、転送量が増えるので)

Googleで調べてみて、ロードバランサとしてNginxを使う場合のrobots.txtの扱いはなかなか
見つからないなぁ、と試行錯誤しつつ、最終的な設定は以下の通りで思うように動作した。

    server {
        listen 80;
        server_name hoge.com *.hogehoge.com;
        access_log /var/log/nginx/hoge.com.access.log main;
        error_log /var/log/nginx/hoge.com.error.log;

        location /robots.txt {
            alias /home/hoge/public_html/robots.txt;
        }
        location / {
            proxy_pass http://backend;
    }
    }


ポイントは、location /robots.txtの領域である。
ここで内部のrobots.txtを見に行くようにしている。それ以外のものはproxyで内側の
ウェブサーバに接続に行く設定。


クローラーさん対策2:robots.txtの設定

肝心のrobots.txtにはいくつかの設定を書けます。

完全拒絶派

すべての検索クローラーさんを拒絶する場合は以下の通り。

user-agent:*
disallow: /

ちょっとだけならいいわよ派

すべての検索クローラーさんを拒絶する場合は以下の通り。Crawl-delayで秒単位で設定できる。以下の例は
600秒(10分)間隔で許可。

user-agent:*
Crawl-delay: 600

特定検索クローラーだけはご遠慮派

例えばBaiduさんだけ制限する場合は次の通り。
Baiduさんは3つ書かなければなりません。

user-agent: Baiduspider
Crawl-delay: 600

user-agent: BaiduImagespider
Crawl-delay: 600

user-agent: BaiduMobaider
Crawl-delay: 600

参考:Baidu(バイドゥ)について > ウェブマスターサポート > アクセス制御方法について


まとめ

とりあえず、このNginxとrobots.txtの設定で様子を見てみます。

クラウド使っている人は、リソースとの闘いなので、上述のような水際で
制限する方法は、結構便利だと思います。