クローラーからのアクセスを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にはいくつかの設定を書けます。
ちょっとだけならいいわよ派
すべての検索クローラーさんを拒絶する場合は以下の通り。Crawl-delayで秒単位で設定できる。以下の例は
600秒(10分)間隔で許可。
user-agent:*
Crawl-delay: 600
特定検索クローラーだけはご遠慮派
例えばBaiduさんだけ制限する場合は次の通り。
Baiduさんは3つ書かなければなりません。
user-agent: Baiduspider
Crawl-delay: 600user-agent: BaiduImagespider
Crawl-delay: 600user-agent: BaiduMobaider
Crawl-delay: 600
参考:Baidu(バイドゥ)について > ウェブマスターサポート > アクセス制御方法について