このごろ503エラーが多発しています

2008年2月28日(木) 03:04 | 日記

最近、この日記がエラーで見られないことがあります。
パソコン用のトップページは大丈夫なのですが、携帯からアクセスすると「Service Temporarily Unavailable」と書かれた画面が出て、サイトが表示されないという事態が多発しています。
日記のコメントも、もしかしたらエラーのために一時的に書き込めなかったかもしれません。
個人的には、日記を書くための管理画面も同様のエラーで開けないことがあって、困っています。
いったいどうしてしまったのでしょう。

この日記では、一部のページを動的に表示しています。
トップページと個別の日記ページなどは静的なHTMLファイルを生成している一方で、月別ページやカテゴリー別ページ、あるいはトップページの最下段にある「次の10件」のリンク先などについては、Perlという言語で書かれたプログラムで、読者からのアクセスのたびにHTMLを生成して表示させるという方法をとっています。また、携帯用サイトについては「MT4i」というプログラムを使い、すべてのページをCGIプログラムによって動的に表示させています。
難しい話は僕も分かりませんが、とにかく携帯用サイトや月別ページの動的ページについては、アクセスのたびにサーバーがプログラムを走らせるため、アクセスが増えれば増えるほどサーバーに負荷がかかるわけです。
負荷が一定量を超えたときに出るのが「Service Temporarily Unavailable」というメッセージで、俗に言う503エラーです。負荷が高まったのでこれ以上PerlやCGIの処理はしません、というサーバーの意思表示です。
つまり、この日記に対するアクセスが一時的に増えていたことが、エラーが多発した原因のようです。

それにしても、1日250人ほどのアクセスでエラーが出るほどのサーバーではないはずなのですが。
不審に思い、アクセスログを調べてみました。どうやら原因は検索エンジンのクローラーだったみたいです。「Baidu」という検索サイトのクローラーがCGIプログラムを走らせた跡が、アクセスログのそこらじゅうから発見されました。
しかも間が悪いことに、そのCGIは携帯サイトの過去ログページ。記事の件数が2700件以上と一般のブログより明らかに多いためか、1年以上前の記事にアクセスすると、ページを読み込んで表示されるまで30秒近く待たされるか、最悪の場合にはさんざん読み込んだあげく、エラーメッセージが出てしまうこともあります。いずれにしても、サーバーはかなり長い時間にわたってCGIを読み込むことになります。503エラーが多発するのは、どうやらこれが原因のようです。
Baiduのクローラーは、よりによって最もアクセスしてほしくないページに、何回も連続してアクセスしていたわけです。

とりあえず対策として、「robots.txt」という検索エンジンのクローラーを避けるためのファイルをサーバーに置きました。携帯サイトのプログラムが入っている階層のみ、Baiduが読み込まないようにしました。グーグルやヤフーのクローラーは今のところそうした動きはないので、ひとまず対象はBaiduのみです。
ファイルを設置してから、エラーが出なくなりました。効果はあったみたいです。

自分のサーバーでブログを管理していると、どうしてもこういう面倒くささがありますが、僕としてはむしろ、こうしてサイト全体をコントロールできることが楽しかったりします。一般のブログサービスと違って、サイトのカスタマイズも自由自在ですからね。ただし実作業はかなり面倒くさいですが。

コメントを投稿

※サーバーの状況によって、投稿完了まで時間がかかることがあります。
※投稿内容がすぐに反映されないことがありますが、ページを再読み込みするとコメントが表示されます。
※入力したURLは公開されますが、メールアドレスは公開されません(管理者に対してのみ通知されます)。