どうも、フリーランスのITエンジニア兼ブロガー兼投資家のKerubitoです。
サイト運営をしている者にとって鬼より怖い「500エラー」。
先日、当ブログでも発生し、数日に渡り格闘しました。
はじめに原因を書いておくとサーバ内部の改ざんです。
いろいろ頑張って対応したので、ブログの記事にしない手はない。
そう思い、WordPressの500エラーに関してまとめました。
あまり体系的には書かれていませんが、こういうケースの情報があまりなかったので、誰かの役には立つかも!?
500エラーってなに?
Web関連に詳しくなく、いきなり自分の運営しているサイトが500エラーになった人は相当焦るはず。
500エラーがどういったエラーなのか簡単に説明しておきます。
500エラーは「サーバの中でエラーが発生している」という意味です。
このエラーはなかなか厄介で、これだけではなんのことがわかりません・・・。
とはいえ、考えられる原因がいくつかあるので、それらを上げていきます。
その前に重要なことを。
500エラーが発生する前後どういった変更をサイトに加えたか
500エラーを調査する際、重要なのは前後でどういった変更をサイトに加えたかです。
「うーん、何か変更を加えたかな、よく覚えてないなぁ」
「いつから500エラーが発生しはじめたかもよくわからないし・・・」
といった声が聞こえてきそうですが(笑)よく思い出してください。
500エラーが発生しはじめたタイミングはログを見ればおおよそわかります。
「ログ?そんな難しいことはわからん!」
という場合は、Googleアナリティクスでアクセス情報を調べてください。
急にアクセスが減ったりしてないですか?
そこで500エラーが発生しはじめているはず。
とにかく500エラーが発生する前にサイトに行なった変更が原因である可能性が非常に高いです。
新しいプラグインを入れた。
プラグインを更新した。
WordPressのバージョンを上げた。
レンタルサーバのPHPのバージョンが上がった。
とにかく何かサイトに変更が加わったはずです。
500エラーが発生する原因
500エラーが発生する原因については、ざっと上げると以下のようなものがあります。
・.htaccessの問題
・ディレクトリのパーミッションの問題
・ファイルのパーミッションの問題
・ソースの記述ミス
・Web改ざん
ほかにも細かい原因はあるんですが、これらで9割は占めているかと。
.htaccessの問題
.htaccessはApacheというサーバソフトのアクセス制御をするファイルです。
この記述内容によっては、配置されているディレクトリにアクセスできなくなります。
ディレクトリのパーミッションの問題
パーミッションとは権限で、ディレクトリのパーミッションによってはそのディレクトリにアクセスできなくなります。
FFTのソフトでパーミッションを確認してみましょう。
何かの拍子にパーミッションが変わってしまうということもなくはないです。
ファイルのパーミッションの問題
ディレクトリと同じですね。
ファイルにもパーミッションがあって、実行権限、読み取り権限が不足していたりするとエラーになります。
ソースの記述ミス
WordPressはPHPというスクリプト言語で書かれていますので、ソースを修正することがあるかもしれません。
たった1行でもおかしな記述があれば、500エラーを引き起こしてしまいます。
まあ、画面が真っ白になるぐらいが多いかもしれませんが。
Web改ざん
悪意のある第三者によってWebサイトが改善されると「500エラー」が発生します。
これは一番厄介で、自分としてはなにも変更していないのに勝手に変わっているので原因も特定がしにくいです。
今回、私の原因はこれでした(笑
Web改ざんに対して行なったこと
幸いなこと(?)に、レンタルサーバ会社から
「おたくの領域にめちゃめちゃアクセスきてるから、遮断するね!」
という連絡があり、加えて疑わしいところまで教えてくれました。
以下、メールの抜粋です。
----------------------------------------------------------------------------
弊社ではサーバの稼働状況について24時間体制で監視を行ってお
この度、お客様にご利用いただいております「***」
にて負荷が著しい状況にあり、調査の結果、下記のパスに設置され
ファイルが原因であると思わしきことを確認しましたため、ご連絡
ました。
/home/******/www/images/haccess.php
/home/******/www/ealxdpgytu.php
/home/******/www/ccarifslba.php
/home/******/www/engineer/haccess.php
/home/******/www/zcatealckr.php
/home/******/www/ojxzysqdhz.php
/home/******/www/biyoispkpb.php
/home/******/www/bujtynoiwf.php
/home/******/www/oxozmgwstm.php
/home/******/www/nzbjpfbbji.php
/home/******/www/kxdphxearf.php
/home/******/www/jwhrqiljrc.php
/home/******/www/sdpyhfmkrv.php
お手数ではございますが、サーバへログインいただき、ファイルに
いる内容のご確認をお願いいたします。
もし、こちらの内容について意図しない挙動を行う記述があれば、
第三者より何らかの手法でファイルの設置、もしくは改ざんが行わ
不正アクセスの踏み台とされていることが考えられます。
----------------------------------------------------------------------------
これはやばい!?
サーバのリソース情報見てみたら、めっちゃ不正アクセスされてるし・・・。
ええ、ここから徹夜作業です(笑
バックアップと最新を本番サーバから引っこ抜いて両者を比較します。
面倒だったのが、直近のバックアップはあてにならないという点。
すでに改ざんされている可能性が大だからです。
なので、怪しいファイルのタイムスタンプやログなどから改ざんされた日時を割り出し、それ以前のバックアップを用意します。
そこから地道なリカバリ作業。
これ、WordPressを再インストールしなおして、そこにコンテンツを適用する方が確実かもしれません。
しかし、DBや画像、プラグイン諸々のことを考えると、動かなくなったら怖すぎるので、怪しいところを直していくにとどめました。
数日経過をみている限りでは正常に動いているので、一安心です。
このあたりの知識がなさすぎるので、もっと効率的に対処したい・・・。