サーバのログは毎朝メールで届くようにしているのだけど、不定期に大量の変なアクセスが来ていたことは知っていて不思議に思っていた。
恐らくはブログの各ページを収集するボットだろうとは思っていたけど、404 エラーとして以下のような内容のメールが届く。
404 Not Found /blog/20120512191118.html\x5c: 2 Time(s) /blog/20120516225154.html\x5c: 2 Time(s) /blog/20120517210802.html\x5c: 2 Time(s) /blog/20120522235807.html\x5c: 2 Time(s) /blog/20120530133050.html\x5c: 2 Time(s) // 以下略
収集しようとするファイルの末尾に必ず “\x5c” という文字列が入るので、404エラーになるのは当たり前。必ず2回アクセスされるのは、こちら側がリバースプロクシ設定しているから。
不定期とはいえアクセスの度に各エントリファイルの末尾に勝手に文字列加えてアクセスされても困るわけで、やっとこaccess.logをチェックする気になった。それで結論なのだけど、User Agentが『QuerySeekerSpider』というクローラのアクセスであることが判明したわけです。
というわけで、nginxアクセス制限用の設定ファイルを作った。nginxをインストールしたらサンプルとしてdeny_f.txtというファイルがあるので、それを参考にしています。
cd /etc/nginx sudo vi deny.conf
set $deny_f 0; if ( $http_user_agent ~* 'QuerySeekerSpider' ) { set $deny_f 1; } if ( $deny_f = 1) { return 403; }
上記deny.confを保存したら、nginx.confに読み込ませる設定を記述する。if文を利用した判定はseverかlocation内に記述しなければならないので注意。
server { listen 80; server_name example.com; include /etc/nginx/deny.conf; // 以下略
nginx.confのチェックをして問題なければnginxの再起動。あとはブラウザでUser Agentを変更してアクセス。403エラー表示されたら成功。