category に対するクローラアクセス制御
カテゴリー経由で存在しない超未来とか超過去のページに飛ぼうとして無駄アクセスを繰り返して負荷がかかっていたので、
.htaccess に以下のように書いてみた。
RewriteCond %{QUERY_STRING} category RewriteCond %{HTTP_USER_AGENT} Googlebot [OR] RewriteCond %{HTTP_USER_AGENT} Slurp [OR] RewriteCond %{HTTP_USER_AGENT} Twiceler [OR] RewriteCond %{HTTP_USER_AGENT} Baiduspider [OR] RewriteCond %{HTTP_USER_AGENT} Gigabot [OR] RewriteCond %{HTTP_USER_AGENT} msnbot RewriteRule .* - [L,R=404]
?の後ろの QueryString 部に category が含まれていて、ユーザーエージェントがクローラっぽかったら 404 を返す。
ちなみにアクセスログはこんな具合。確かにこんなペースで来たら死ねる。
65.55.210.57 - - [19/Jul/2007:02:40:26 +0900] "GET /~h/tdiary/?category=ALL;year=2002;month=1Q HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:26 +0900] "GET /~h/tdiary/?category=SSL;year=1979 HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:27 +0900] "GET /~h/tdiary/?category=Subversion;year=1977 HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:27 +0900] "GET /~h/tdiary/?category=IPv6;year=1995;month=1Q HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:28 +0900] "GET /~h/tdiary/?category=Cygwin;year=2013 HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:28 +0900] "GET /~h/tdiary/?category=xyzzy;year=2012;month=2H HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:28 +0900] "GET /~h/tdiary/?category=Mac;year=2007;month=11 HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:29 +0900] "GET /~h/tdiary/?category=xyzzy;year=1994;month=4Q HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:29 +0900] "GET /~h/tdiary/?category=tDiary;year=2006;month=03 HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 65.55.210.57 - - [19/Jul/2007:02:40:29 +0900] "GET /~h/tdiary/?category=xyzzy;year=2005;month=2H HTTP/1.0" 404 208 "-" "msnbot/1.0 (+http://search.msn.com/msnbot.htm)" 64.1.215.163 - - [19/Jul/2007:02:40:32 +0900] "GET /~h/tdiary/././?category=NFL HTTP/1.0" 404 208 "-" "Mozilla/5.0 (Twiceler-0.9 http://www.cuill.com/twiceler/robot.html)"
ついでに tb.rb への無駄アクセスもあったので.htaccess に以下の行も追加
RewriteCond %{HTTP_USER_AGENT} Googlebot [OR] RewriteCond %{HTTP_USER_AGENT} Slurp [OR] RewriteCond %{HTTP_USER_AGENT} Twiceler [OR] RewriteCond %{HTTP_USER_AGENT} Baiduspider [OR] RewriteCond %{HTTP_USER_AGENT} Gigabot [OR] RewriteCond %{HTTP_USER_AGENT} msnbot RewriteRule tb\.rb - [L,R=404]
先週ぐらいから、ここを読めてたのは RSS経由で読んでた人だけなんじゃなかろうか。ほとんどサービス停止状態だった。
気づいたら killall ruby しまくっていた状態。
広告