ブログが突如開けなくなったと、当サイトの YAMAKO さんからメールが入った。あわてて自分のブログ(n-shuhei.net/atelier/)にアクセスすると、下のように同じ 500 error がでる。
レンタル・サーバー先の Xserver のサポートの助けがあって、なんとか修復できたので、備忘録として記録しておきたい。
"Internal Server Error xserver" (xerver はサイトを置いているレンタル・サーバーである)で原因をネットで探ってみると、次のような回答があった。
新しいプラグインを設定するなど何も弄っていないので、原因は「CGIやPHPの同時接続数が多くなり、アカウント単位のリソース制限となっている」ぐらいしか考えられないが、急激にアクセスが増えたとは思われない。知識が少ない老人には解決できそうにない。思い余って、xserver のサポートに助けを求めた。
本件はお客様のサーバーアカウントにおきましてプログラム負荷が高まったため、一時的なリソース制限が行われその影響で500エラーが発生しているようです。
当サービスではPHPやCGIプログラムの実行、FTP接続、IMAP接続など全ての動作における合計に「同時稼動数」の上限を設けております。
「同時稼動数」が上限に達しますとPHPやCGIの実行で500エラーや503エラーが発生したり、IMAP接続に失敗するという状況が発生します。
そのような状況下で500エラーが発生している場合はサーバーパネル「ログファイル」にてエラーログを確認していただければリソース制限によるものかどうかをある程度確認することが可能です。
エラーログには以下のようなログが発生しますのでご参考にしていただければと存じます。
------------------------------------
Resource temporarily unavailable(PHP実行時)
suexec policy violation: see suexec log for more details(CGI実行時)
------------------------------------
Premature end of script headers
という旨のエラーメッセージが表示されている場合は、CGIの同時起動数が多くなり、
アカウント単位のリソース制限がかかっている可能性がございます。
(ご参考:突然、または断続的にCGIやPHPが500エラーで動作しない。)
http://www.xserver.ne.jp/faq_service_php.php#11
お客様の場合はCGIプログラムが、この「同時稼動数」を圧迫し、WEBサイト上のPHPなどの実行にも影響を及ぼしております。
大変お手数ですが、お客様が構築なされたプログラムについて構成の見直しを行っていただくことや、該当プログラムを一時削除いただく、またはパーミッション値を000等に変更し無効化することで症状が改善されるかなどお試しいただきましたら幸いです。
自分で分かる範囲で、指示された事項をいじってみたがうまくいかない。それで、"Xserver 500 error" で更にググってみると、次のようなページがヒットした。
http://net10man.com/archives/1836/
ここに書かれているPHP高速化設定(FastCGI化)を XserverPanel で実行してみると、ホームページへのアクセスは出来るようになった。が、MovableType の管理・編集画面でも同じような 500 Internal Server Error が出て、新たにブログを編集することができない。
再び、Xserver サポートに助けを求めた。次のような回答があり、今回の原因は悪質なクローラーが絨毯爆撃的に、robot でクロールしていたことが原因らしいと分かった。
サポートにて確認いたしましたところ、このたびのリソース制限の原因でございますが、お客様設置の【mt-search.cgi】というプログラムが多数稼動しサーバーアカウントにてご利用可能なリソースを大きく圧迫しておりました。
取り急ぎサポートにて該当プロセスを強制終了しましたので、再度状況をご確認くださいますようお願いいたします。
また、これまでと同様のホームページ運用を行っている場合、いずれ同様の500エラーが発生してしまいます。
・該当プログラムへのサーチエンジンロボット(クローラー)からの過剰なアクセスがある場合にはアクセスを拒否する
など、適切なご対応をいただきますようお願いいたします。
※mt-search.cgiはMovableTypeにて作成した記事の「全文検索」を行うためのプログラムかと存じます。こちらのプログラムへ集中アクセスが起きた場合、この度のようなリソース制限の原因となってしまいます。
悪質クローラーからのアクセスを拒否する方法について、xserver サポートに問い合わせて見ると、次のような回答があった。以下に記すように、ブログへのアクセス解析サービス Artisan lite を導入しているので、方法をよく考えて実施したいと思う。それにしても、たくさんのクローラー(検索エンジンBot)がネット上では動いているのだ。
検索エンジンBotのアクセス制限につきましては、サーバーパネル「アクセス拒否」設定等にて設定を行っていただければと存じます。
※アクセスログ等にて過剰なアクセスがないか等、ご確認ください。
なお、主要な検索エンジンのクローラーからのアクセスを拒否しても問題がないようでございましたら、[public_html]フォルダ直下の[.htaccess]に、下記の記述を追加していただくことで拒否が可能でございます。
########################################
Deny from env=blockbot
SetEnvIf User-Agent "Googlebot" blockbot
SetEnvIf User-Agent "Slurp" blockbot
SetEnvIf User-Agent "bingbot" blockbot
SetEnvIf User-Agent "Yeti" blockbot
SetEnvIf User-Agent "Baiduspider" blockbot
SetEnvIf User-Agent "DotBot" blockbot
SetEnvIf User-Agent "AhrefsBot" blockbot
SetEnvIf User-Agent "bingbot" blockbot
SetEnvIf User-Agent "TweetmemeBot" blockbot
SetEnvIf User-Agent "FlipboardProxy" blockbot
SetEnvIf User-Agent "QuerySeekerSpider" blockbot
SetEnvIf User-Agent "PaperLiBot" blockbot
SetEnvIf User-Agent "Google-HTTP-Java-Client" blockbot
SetEnvIf User-Agent "EveryoneSocialBot" blockbot
SetEnvIf User-Agent "LongURL API" blockbot
SetEnvIf User-Agent "LivelapBot" blockbot
SetEnvIf User-Agent "FlipboardProxy" blockbot
SetEnvIf User-Agent "Twitterbot" blockbot
SetEnvIf User-Agent "help@dataminr.com" blockbot
SetEnvIf User-Agent "MetaURI API/2.0 +metauri.com" blockbot
SetEnvIf User-Agent "Applebot" blockbot
SetEnvIf User-Agent "Jakarta Commons-HttpClient/3.0.1" blockbot
SetEnvIf User-Agent "ShortLinkTranslate" blockbot
SetEnvIf User-Agent "EveryoneSocialBot" blockbot
SetEnvIf User-Agent "OpenHoseBot" blockbot
SetEnvIf User-Agent "MetaURI" blockbot
SetEnvIf User-Agent "ceron.jp" blockbot
SetEnvIf User-Agent "FlipboardProxy" blockbot
SetEnvIf User-Agent "Go 1.1 package http" blockbot
SetEnvIf User-Agent "Applebot" blockbot
SetEnvIf User-Agent "Sogou web spider" blockbot
SetEnvIf User-Agent "YodaoBot" blockbot
SetEnvIf User-Agent "msnbot" blockbot
########################################
おかげで、MovableType のブログ編集画面も元に修復したが、設定している xserver の設定を見直すと、しばらくほってあったので、PHPやデータベース MYSQL のバージョンなどが低くなっている。これらのバージョンをUPすると、今度は
ブログへのアクセス内容を解析するサービス Artisan lite が稼働しなくなった。
5年前にArtisan lite を設定してから、これも見なおしていなかったので、バージョンが上がるなど問題が発生している。色々と修復を試みたが、うまくいかず、仕方なく新たにインストールしなおしたら、ようやく動くようになった。Artisan Lite のインストールについては、別のエントリーで記録しておきたいと思う。