先日、自分のサイトを表示させたら500エラーが出ました。
で、リロードして再表示したらエラーは出なくなったわけですが、もしこういった500エラーが頻発していたら、せっかく訪れてくれた訪問者を逃してしまうことになります。
しかし普通にサーバーを利用していて、こういったエラーは、いつ、どのくらいの頻度で出ているのかわかりづらいところがあります。
そういった場合のエラー確認方法として、エックスサーバーのアクセスログ確認方法を紹介したいと思います。
ちなみに、エックスサーバーについての詳細は以下。
photo by Sibe Kokke
目次
エックスサーバーでエラーログを確認
エックスサーバーでエラーログを確認するにはまず、サーバーパネルからログインします。
サーバーパネルが表示されたら、「ログファイル」をクリックします。
すると、サーバーに登録されているドメインが表示されるので、エラーログを参照したいドメインの「選択する」をクリックします。
あとは、「エラーログの一覧」タブをクリックの後、表示された「ダウンロード」ボタンをクリックするとエラーログをダウンロードすることができます。
ファイルは、「ドメイン.error_log」という名前のファイルがダウンロードされます。今回の例で言うと「nelog.jp.error_log」というファイルがダウンロードされました。
エラーログの内容
エックスサーバーではPHPやCGIプログラムの実行、FTP接続、IMAP接続など全ての動作における合計に「同時稼動数」の上限が設けられています。
「同時稼動数」が上限に達するとPHPやCGIの実行で500エラーや503エラーが発生したり、
IMAP接続に失敗するという状況が発生します。
また、.htaccess等でアクセス制限をしている場合は、503エラーが書き込まれます。
先程ダウンロードしたファイルに、そのエラーログが書き込まれています。
僕の場合は、以下のようなログが書き込まれていました。
client denied by server configuration:
1 | [Mon Sep 14 03:15:19 2015] [error] [client XXX.XXX.XXX.XXX] client denied by server configuration: /home/XXXXXXXXX/nelog.jp/public_html/xmlrpc.php |
「client denied by server configuration: (中略)xmlrpc.php」のエラーに関しては、以前、Wordpressの「xmlrpc.php」ファイルへの攻撃が激しかったので、アクセス拒否したので、意図通りブロックされていることになります。
Premature end of script headers:
1 | [Sat Sep 12 14:31:38 2015] [error] [client XXX.XXX.XXX.XXX] Premature end of script headers: index.php |
「Premature end of script headers:」というエラーメッセージが表示されている場合は、CGIの同時起動数が多くなり、アカウント単位のリソース制限がかかっている可能性がある場合だそうです。(エックスサーバーのサポートの方に聞きました)
これは、PHPファイルの同時接続数上限オーバーによる一時的なリソース制限が実施されたときにも表示されるようです。
エラーが出る毎に1行追加されるので、5000アクセスでエラーが出た場合は、5000行表示されます。
ただエックスサーバーの場合、同時接続数の上限値については同社非公開情報となるため明確なご案内を受けることはできません。なので、どれくらいの接続数がきたらリソース制限がかけられるかはわからない状態になっています。
このリソース制限は、上位プランに変更したとしても、上限の差異は無いそうなので、抜本的な解決にはならないそうです。
これらを、解消するには、キャッシュプラグインなどを使用して、サーバーのCPU負荷を減らすか、サーバー内の構成ファイルの見直しをするしかないのかもしれません。
今回、僕のエラーログを見た限りでは、1日につき3回程「Premature end of script headers:」エラーが出ていただけだったので、それほど深刻な500エラー状態ではないかと思っています。(もちろんエラーがでないのが一番ではありますが)
その他
そのほかには、以下のような、PHPやCGIの実行時エラーも表示されます。
- Resource temporarily unavailable(PHP実行時)
- suexec policy violation: see suexec log for more details(CGI実行時)
WordPressで、PHPの実行時エラーが出ている場合は、サイトが真っ白になっているので、そもそも普通に気づくかもしれません。
注意
エックスサーバーのエラーログは毎日3時に定期的に削除されます。なので、基本的に1日分しか見れません。過去にさかのぼってエラーメッセージを見るには、アクセスログを見る必要があるかもしれません。アクセスログはデフォルトの設定で1週間分保存されます。
まとめ
エックスサーバーを利用していて、自分でアクセスをしているときに、500エラーなどを見かけたときは、上に書いたような感じで、エラーログの確認はしておいた方が良いかもしれません。
あまりにも、「Premature end of script headers:」等のエラーが多く書き込まれている場合は、何かしらの対策をする必要があるかと思います。
対策してもダメな場合は、さらに良いスペックのサーバー(クラウドサーバ等)に移動する必要があるかもしれません。