990205 – Internal Server Errorが表示されるのを回避するために悪あがきした話

9917-01

このサイトはWordpressへ移行した頃から時々Internal Server Error(500エラー)が発生して、ずっと悩まされ続けている。

Internal Server Errorとは何か?については他に詳しく書かれているサイトがいくらでもある(=それだけ悩まされている人が多いことの証左だろう)ので、詳細な説明は省略するが、要はサーバー内部で動いているプログラムの設定ミスやバージョン不一致などの理由により正常に処理が行えなかった時に出力されるエラー、と言うことだ。

その出現パターンは大きく二つに分けられる。一つは常にエラーとなってしまうパターン。もう一つはたまにエラーになってしまうパターンだ。

常時エラーのパターンの場合、バージョン不整合やプラグインの相性、パラメータ設定ミスなど、何らかの致命的な不具合があるわけで、そこを解消させれば大抵直るのだが、たまに発生するパターンの場合、普段は正しくロードされるので、どこに設定ミスがあるのか見つけづらい。設定に問題がなかったとしても、サーバーハードウェア側の相性などが原因で発生していることもあるのでさらにややこしい。

ウチのサイトは後者に該当する。
普段は問題なくロードされて記事が表示されるのだが、なんかのタイミングでエラーになることがある。エラーになっても、ブラウザでリロードすれば大抵解決するので、どこに問題があるのかよく分からない。
大抵解決する、と言っても、自分自身はリロードすれば解消することを知っているから対処できるが、初めてサイトを訪れた人がこれに出くわしたら、普通はリロードせずに別のサイトに行ってしまうだろう。

そういう意味ではたまに出るだけでも結構クリティカルな問題なのである。

エラーとなるパターンを見ていると、何となく新規の記事をアップロードした直後の一回目のアクセス時や、最近開いていない古い記事へアクセスした時に出ることが多いような気がする。となるとキャッシュ関係だろうか。

ネットで調べてみると、自分と同じような事象に悩まされている人が散見される。特にさくらのレンタルサーバースタンダードの利用者に多い気がする。
それらの人は、大抵別のプランや別のホスティング業者への引っ越ししかない、という結論に達している。
さくらのスタンダードプラン契約者が使っているサーバーはスペックが低いらしく、小手先の対応では解決できないかららしい。

このサイトは基本的に自分用のメモを公開しているに過ぎないので、アクセス数を稼ぐための工夫も殆どしていない。それはアクセスログを見れば一目瞭然で、ほとんど誰も見に来ていない。あまりに過疎ってて笑っちゃうほどだ。当然、アフィリエイトをやろうという気にもならない。

お金にならないし、誰かのためになるものでもないので、正直金かけてやるようなことではない。本来なら無料サーバーなどに公開したいくらいなのだが、広告表示が煩わしかったり、ファイル管理が面倒だったりと言うのがイヤなので、趣味の範囲として最低限のコスト負担は許容している。

さくらのスタンダードプランは有料のホスティングサービスの中では割と安価で容量が大きいというのがメリットで選んだサーバーだ。
そういう前提なので、多少のスペックの悪さは許容範囲と思っている。

上でクリティカルと書いたが、このサイトに限っては大して影響がない。そんな手間をかける気もないので、引っ越しなんて考えただけで面倒だ。
少し調べただけでは解決方法が見つからなかったので、とりあえずAuthorのところにリロードの旨のアナウンスしてお茶を濁している。

本当にサーバースペックが原因だというなら放置するしかないのだが、万一設定ミスに起因しているものだとしたら、それを放置しているのもちょっとカッコ悪いし、場合によってはさくらに迷惑をかけている可能性もある。なので、設定側の問題ではないことだけは確定させておきたい。ということでもう少し調べてみることにした。

まず、さくらのコントロールパネルでエラーログをチェックしてみる。普段この辺はあまりチェックしていなかったのだが、見て見ると結構な量のエラーを吐いている。エラーログの追記だけでも結構サーバーに負担をかけているかもしれない。

ログに記録されているエラーは、もっぱら「End of script output before headers: xxxxxx.php」というエラーである。「xxxxxx.php」のところは、admin-ajax.phpが多数を占めているが、一部index.phpなども混じっている。
こういう時のデバッグは沢山出ているエラーから消していくのがセオリーなので、まずはこのエラーの解消を目標にする。

Internal Server Errorが出た場合の一般的な解決方法として、画像サイズを小さくする、キャッシュ設定を最適化する、DBのデータや不要なヘッダーを整理する、不要なプラグインを消す、などがあるらしい。

画像サイズについては、アップロード前に画像を全て1024*768前後のサイズにリサイズして、またページに貼る画像は640*480を基準としたthumbを貼る(リンクで大きい画像が出る)ようにしているので、これが影響していることはなさそうな気がする。

キャッシュプラグインは、AutoptimizeとWP Super Cacheが入っている。キャッシュ周りの設定は良く分からないので推奨設定のままである。
推奨値なので、相性の問題が無ければ少なくとも普通に動くような気がする。

それとDBの最適化用として、Optimize Database after Deleting Revisionsを入れている。DBの構成についてもよく分かっていないのだが、キャッシュプラグイン同様、デフォルト設定で使っているので、これもそれほど影響しているとは思えない。

それ以外のプラグインは、ネットでおススメされているようなものや、さくらでWordpressをインストールした時に最初から入っていたプラグインがいくつか動いている。全部で10個くらい。大したものは入れていないので影響はなさそうに見えるが、実は相性が悪いプラグインがあるかもしれないので、無効化して解消するか確認してみよう。

とはいっても一つ一つ無効化して切り分けるのは面倒だったので、一旦すべてのプラグインを無効化してみた。サイトのバックアップを取った後に、FTPソフトでアクセスしてpluginのフォルダ名をリネーム。これで一切のプラグインが動作しなくなるが、それでも改善しなかった。

プラグインじゃないとしたらテーマだろうか?
テーマはLuxeritasというものを使っている。作者サイトにアクセスしてみたら、いつの間にかバージョンがだいぶ進んでいた。
LuxeritasはWPのライブラリから入手できないので、作者サイトにアップロードされているのをダウンロードして使っている。そのせいか自動更新がされないようである。

最新バージョンはWP6.0対応と言うことである。このサイトもWPの自動更新によって6.0に上がっている。これか!と思って最新に更新してみたのだが、これでもダメだった。全然変わらない。

とりあえずもう一度、Luxeritasの設定を見直してみる。
高速化一括設定という項目の中に「※ Luxeritas でキャッシュプラグインを導入すると、むしろ遅くなる可能性があります。」と書かれていた。プラグインはさっき無効化して駄目だったので、あまり関係はなさそうだが、念のためAutoptimizeとWP Super Cacheを無効化してみた。だが案の定変化なし。

更に、高速化&セキュリティ向上用htaccessというタブを見たら、.htaccessファイルに記載内容を追加しろ、と書かれている。これもやってなかったので、ついでに.htaccessファイルに追記。

その状態でブラウザをリロードしてみたら、なんか微妙に早くなった感じがする。無駄に複数のキャッシュプラグインが動いていたので、悪さをしていたのかもしれない。
ただ、頻度はやや減ったような気がするものの、相変わらずInternal Server Errorは度々発生するし、エラーログにもページのロードの度に(成功しても失敗しても)同じエラーを吐き出し続けている。

あと出来そうなことは、テーマ変えてみるくらいしかない。これで変わらなければ完全にサーバーの問題とみなしてよいだろう。
ということでテーマを標準添付のTwenty-Twenty-Twoに変えてみたら、パタッとエラー出力が止まった。Luxertusでしたか。。。

ちなみに、Twenty-Twenty-Twoに変えたらエラー記録が無くなったのみならず、ページ表示が爆速になった。

やっぱりシンプルな構成で運営するのが一番なのだろう。シンプルなのはいいことなのだが、Twenty-Twenty-Twoのデザインがどうにも気に食わない。CSSなりなんなりいじくればマシになるとは思うのだが、そこに手を出したら沼にハマることが目に見えている。

と言うことでLuxeritasを変えたくない。
他に方法がないのであれば、これ以上対処できることがない。もうエラーは放置でいいや、という結論に至った。

9917-02

それで画面を閉じようと思った時、何となくさくらのコントロールパネルを見ていたら、データ移行ツール、という項目が表示されていることに気付いた。開いてみたら新サーバーへの移行ツールと書かれている。新サーバーとは??

調べてみると、さくらは2022年の2月ごろからスタンダードプラン利用者向けサーバーのリプレースをやっているらしい。新しいサーバーはストレージがSSDになり、PHPがモジュールモードで動くようになったりと、かなりのパフォーマンスが向上が見込めるらしい。

新サーバーへの移行についてはツールを使って移行する限りにおいて特に追加費用などは不要とのこと。

ただし、問題なく移行できるかどうかは、いくつかのチェック項目をクリアする必要があるそうだ。そこに書かれていることをざっくり総合すると、オリジナルドメインをさくら以外のサービスで取得している人や、サーバー内で個別にアプリを動かしている人などは影響が出るようだが、それ以外は移行ツールで新サーバーに移行できるらしい。
当サイトはチェック項目に該当するものがなかったので、あまり気にする必要もなさそうである。

ネットで移行した人の記事を見つけたので読んでみたら、その人もInternal Server Errorをはじめとする種々の不具合に悩まされていて、テーマをTwenty-Twenty-Oneに変えたら概ね解消、最終的にサーバーの移行を実施して新サーバーに切り替えたら、その段階でピタッとエラーが止まったそうだ。

もしかしたら、当サイトの事象もPHPの実行モードの違いなどが影響している可能性がありそうだ。だったら移行しちゃったほうがよさそうな感じがする。

移行は基本的にツールにお任せとなるようであるが、万一移行中にエラーとなった場合は切り戻しをします、とある。それならエラーでサイトが破壊される、といったようなことはなさそうだ。
ただし、一点気になることがある。ツール上は正常に移行完了したとしても、内部に不整合等があって表示できなくなるようなケースは起こらないのだろうか。もしそうなったら、原因がすぐに特定できないかもしれないので、とりあえず現行サーバーに切り戻しをしたい。だが、その方法がどこにも書かれていない。そもそも旧サーバーへの切り戻しは想定されていないのかもしれない。

まぁ、心配ならサポートにでも聞けばよいのだろうが、それも面倒くさい。
多少の期間ダウンしていたとしても誰も困らないだろし、あまり深く考えずに移行してみようか、と思ったのだが、よくよく見ると、自分で移行させなくても、そのうちさくらの方でタイミングが来たら移行してくれるらしい。

まぁ、移行させなければ古いサーバーのシャットダウンが出来ないのだから、当然と言えば当然だが。

サイトに記載されている移行スケジュールを見ると、自分が契約しているサーバーの移行スケジュールは9月ごろ、あと1か月くらいで移行して貰えるらしい。じゃあ、お任せした方が面倒くさいこと考えずに済んで楽ちんだ。

ということで、人間万事塞翁が馬。その日を粛々と待つことにした。

9月に入って、仕事が忙しくなり、暫くサイト更新が滞っていた。ついでにサーバー移行の事も忘れていて、気が付いたら移行が終わっていた。
これでサイトが表示されていなかったら嫌だなぁ、と思いつつブラウザをリロードしてみたら、問題なく表示された。

ついでにいくつかのエントリも開いてみる。
キャッシュが切れていそうな古いエントリもいくつか開けてみたが、Internal Server Errorは表示されない。これはやったか。

更にコントロールパネルのエラーログを開いてみる。なんと、真っ白。
一件もログが記録されていなかった。

ということで、サーバーの移行によりエラー状態は完全に解消された。結局は待ってりゃよかったのか。
まぁ、WPの仕組みや挙動に対する知識が深まったので、別にいいんだけど。

Posted by gen_charly