制作記……月別アーカイブの調整と「百度」の撃退
2007年09月11日 19:35
実に約半年ぶりになる「制作記」。その間何もサイトの改良をしていなかったわけではないのだが、公開できる内容でなかったり、公開するほどのものでなかった、あるいは単に優先順位が低かっただけの話(笑)。さて今回は、サイトのページ構成における微調整と、サーバー負荷の1原因の究明・解決のお話。
スポンサードリンク
●月別アーカイブの調整……日ごとのエントリーの導入
読者がどのようにアクセスしているかをアクセス解析で色々調べていると、最近「過去の記事」から月別アーカイブを選択する人が以前よりも目立つようになった。個別記事にも「過去の記事」メニューは掲載しているので、検索エンジンなどで直接記事にやってきた読者が、該当記事を読んだ後にトップページに戻らず、直接「過去の記事」から他の記事を閲覧しようとしているのだろう。
ところが今サイトでは、MovableTypeの大元のテンプレートから相当手を加えているため、「日ごとアーカイブ(要するに「記事」)」は用意されていないし、日ごとのカレンダーも設置されていない。必要無いと考え、削除したまでだが、月別アーカイブの読者が増えている状況を見る限り、ニーズに応える必要がある。
そこで、月別アーカイブページにのみ日ごとのカレンダーを復帰。カレンダーは選んだ月のものが表示されるようにした。その上で【公式サイトの説明】などを参考に、選択した日の「すべての記事」が表示されるようにテンプレートを変更。
色々調整の必要があったが、現在何の支障もなくうまく稼動している。サイトの再構築時に「日別アーカイブ」も再構築する必要があるので、時間が余計にかかるようになってしまったが、読者のニーズに応えられるのなら、これくらいは我慢我慢。
●「百度」のアクセス拒否へ
先行して掲示板に一部事情を説明したが、実は9月10日の夜半に当サイトが非常にアクセスしにくい状況が1時間ほど続いた。当方の環境からも閲覧ができなくなり、頭を抱える事態に。サーバー管理会社のメンテナンス情報にも一切記載は無く、設置したスクリプトが暴走したり「荒らし」にあった様子もない。
アクセスそのものが出来なくなる事態は1時間ほどで終わったが、その後も慢性的な過負荷状態は続き、朝方更新した記事は「新規登録すると途中でエラー500(インターナルサーバーエラー、要は処理し切れなくてサーバーがあっぷあっぷしてますということ)」が出る状況に陥ってしまった。かつて「再構築すると丸一日かかるのでSSIなどを使ってテンプレートを全面書き換えした」以前の状態の末期に近い現象だ。昨日から今日にかけて、プログラム・記事更新もあわせ、心当たりはまったく無い。
当サイトは共有サーバーを利用しているので、他のユーザーが無茶なことをしているのかもしれない。ともあれ原因を……ということで、サーバー管理会社と何度かやり取りし、それと同時に何時も出入りしている某大型掲示板のチャットで話を聞いたりしたところ、どうやら中国の検索サイト「百度」のロボット(データを取得するプログラム)がいたずらをしているらしい、という結論に達した。具体的にはこのロボットが、あるファイルに執拗にアクセスをかけているのだ。
「百度」のクローラーによるDoS攻撃!?
→robots.txt設置と.htaccessの修正で
物理的にブロックへ
この「百度」という検索エンジン。名前通りにターゲットとしたサイトに対し、DoS攻撃の如く次々とリクエスト(データ取得のための読み込み)をし、対象となるサイトをパンクさせる実績を持つ。
調べたところ多い時には1日に1万件以上もリクエストをかけてくるとのこと。道理でアクセス解析には一切表示が出ず、それでいてアクセス過多のような現象が起きたわけだ。
この「百度」のクローラーである「Baiduspider」というキーワードで色々調べたところ、同じような被害を受けている日本のユーザーは山ほどいて、すでにいくつもの対処法が語られていた。ありがたく参考にさせてもらい、即時導入。
具体的には「1:robots.txtを該当する場所に設置」「2:.htaccessを修正して元から弾く」というもの。本来なら「1:」だけでよいはずなのだが、「百度」は予想の斜め上を行くリアクションをするようで、「リクエストは高橋名人の連射の如くDoS攻撃のように頻繁にするにも関わらず、robots.txtのチェックは10日ほどの間隔をおく」「robots.txtですら無視するクローラーもある」とのこと。そこで、やれる手立てはすべて打つことにした。参照にした記事は【Baiduspiderまとめ】、Almaz Theater、【晴錬雨読】など。
「1:robots.txtを該当する場所に設置」は、
User-agent: baiduspider
Disallow: /
という内容からなるファイルrobots.txtを、必要な場所に設置。本来ならルートディレクトリィ。
「2:.htaccessを修正して元から弾く」は、.htaccessに
order allow,deny
allow from all
deny from 122.152.128.
deny from 122.152.129.
deny from 60.24.0.0/13
deny from 220.181.0.0/16
deny from 61.135.0.0/16
deny from 203.226.0.0/15
の表記を追加。具体的IPは上記参照記事やWikipediaのを元にしたが、今後さらに増えるかもしれない。
さて成果はどうか。上記両対処をしたところ、明らかに昨日から生じていたサーバー負荷が減った。100%の証明をするにはサーバー管理会社からログの提出を受けるなりする必要があるが、体感できる成果が得られるのならそれでOK。もし万が一、「百度」を使って当方のサイトへアクセスしている人がいたら、「当記事を読めているのなら、利用している検索エンジンの不幸を(略」とでも答えるしかない。
自分に身に覚えがまったくない状況で問題を抱えると、非常に不安な気持ちに追いやられてしまう。今回はたまたま幸運が重なって、早期に解決できた。今回の「百度」の件は、同じような問題にさいなまれている人がいるかもしれないことを考え、あえて記事としてまとめて公開することにした。
また月別アーカイブの件も、当方のように「日別カレンダーを削除した、集積系ブログ・サイト」では意外にニーズは多いはずだ。両者とも何らかの形で、一人でも多くの人に役立ててもらえれば幸いである。
スポンサードリンク
ツイート