あの恐ろしい「500 Internal Server Error」 (内部サーバエラー)。一番不便なときに出るあのエラー。突然発生してしまうあの時に、どうすればWordPressウェブサイトをオンラインに戻せばいいと悩んでいますね。僕らも何回も経験したことがあります。似たようなエラーは例えば「データベース接続の確立中にエラーが発生」と「死の白いスクリーン」があります。しかし、ウェブサイトがダウンした瞬間から、訪問者かつ顧客を失います。それにブランドにも悪影響を与えます。

今回は、500 Internal Server Errorについてご説明し、処理方法をいくつかご紹介します。本エラーの原因と今後の回避策については、下記をご参照ください。

500 Internal Server Errorとは?

ウェブサイトにアクセスするときには、ブラウザはウェブサイトがホスティングされているサーバーにリクエストを送信します。サーバーはそのリクエストを受け取り、処理し、リクエストされたリソース(PHP、HTML、CSSなど)をHTTPヘッダーと共に返信します。HTTPには、HTTPステータスコードというものも含まれます。ステータスコードは、リクエストの状態(ステータス)を通知するものです。ステータスコードは「成功」を意味する200、または「失敗」を意味する500などがあります。

ステータスエラーコード500には意味がそれぞれ異なる種類(500、501、 502、503、504など)が多いです。今回の「500 Internal Server Error」 (内部サーバエラー)の意味は、サーバーがリクエストを実行できない予期しない条件が発生したことです。(RFC 7231、第6.6.1条)

WordPressの500 Internal Server Error
WordPressの500 Internal Server Error

500 Internal Server Errorの種類

同じ500 Internal Server Errorでも、Webサーバー、オペレーティングシステム、およびブラウザーがそれぞれ異なる為、言い方が少し変わってしまう場合があります。意味はもちろん変わりません。ウェブ上で見かけることのできる種類の例をいくつか挙げます:

  • “500 Internal Server Error”
  • “HTTP 500”
  • “Internal Server Error”
  • “HTTP 500 – Internal Server Error”
  • “500 Error”
  • “500 – Internal Server Error”
  • “500 Internal Server Error. Sorry something went wrong.”
  • “500. That’s an error. There was an error. Please try again later. That’s all we know.”
  • “The website cannot display the page – HTTP 500.”
  • “Is currently unable to handle this request. HTTP ERROR 500.”

白いスクリーンにはこのようなメッセージが出る場合もあります:

サーバーに内部エラー、もしくは機器設定エラーが起きたことにより、あなたのリクエストは処理されませんでした。[email protected]よりサーバー管理者に連絡を取り、エラーが起きたこと、そしてエラーを引き起こしたと思われるアクションについて知らせてください。このエラーについてのさらなる情報が、サーバーエラーログに記録されている場合があります。

内部サーバーエラー
内部サーバーエラー

空白の白い画面が表示されることもあります。FirefoxやSafariなどでは500 Internal Server Errorが発生するときによくあることです。

Firefoxの500 Internal Server Error
Firefoxの500 Internal Server Error

Airbnbなどの大きなブランドなら、カスタムの500 Internal Server Errorメッセージがある場合もあります。

Airbnbの500 Internal Server Error
Airbnbの500 Internal Server Error

readmeの500 Internal Server Errorメッセージは想像力が多いです。

readmeの500 Internal Server Error
readmeの500 Internal Server Error

YouTubeでさえ500 Internal Server Error が発生する場合があります。

YouTubeの500 Internal Server Error
YouTubeの500 Internal Server Error

IIS 7.0 以降のバージョン(Windows)では、500 エラーの詳細な原因を特定できるように、以下のHTTP 状態コードが定義されています。

  • 500.0 – モジュールまたは ISAPI のエラーが発生しました。
  • 500.11 – Web サーバーでアプリケーションがシャットダウンしています。
  • 500.12 – Web サーバーでアプリケーションが再起動のためビジー状態になっています。
  • 500.13 – Web サーバーが非常にビジーです。
  • 500.15 – GLOBAL.ASA に対する直接要求は許可されていません。
  • 500.19 – 構成データが無効です。
  • 500.21 – モジュールが認識されません。
  • 500.22 – ASP.NET httpModule 構成は、マネージ パイプライン モードでは適用されません。
  • 500.23 – ASP.NET httpHandler 構成は、マネージ パイプライン モードでは適用されません。
  • 500.24 – ASP.NET 偽装の構成は、マネージ パイプライン モードでは適用されません。
  • 500.50 – RQ_BEGIN_REQUEST 通知の処理中に再書き込みエラーが発生しました。 構成または受信規則の実行エラーが発生しました。
    注: ここでは、受信規則および送信規則の両方について、配布された規則の構成が読み込まれます。
  • 500.51 – GL_PRE_BEGIN_REQUEST 通知の処理中に再書き込みエラーが発生しました。グローバル構成またはグローバル規則の実行エラーが発生しました。
    注: ここでは、グローバルな規則の構成が読み込まれます。
  • 500.52 – RQ_SEND_RESPONSE 通知の処理中に再書き込みエラーが発生しました。 送信規則の実行エラーが発生しました。
  • 500.53 – RQ_RELEASE_REQUEST_STATE 通知の処理中に再書き込みエラーが発生しました。 送信規則の実行エラーが発生しました。この規則は、出力ユーザー キャッシュが更新される前に実行されるよう構成されています。
  • 500.100 – 内部 ASP エラー。

500 ErrorのSEOへの影響

WordPressのメンテナンスモードの際に使用され、メンテナンスが終わったらもう一度確認するようにGoogleに指示する503エラーとは異なり、すぐにでも修正されないと、500エラーがSEOに悪影響を及ぼす可能性があります。ウェブサイトが例えば10分間だけダウンしていて、その間にクロールされていても、ページが単にキャッシュからクロールされます。あるいは、Googleは再クロールする時間さえないかもしれません。この場合には、何も問題ありません。
しかし、ウェブサイトが長期間(たとえば6時間以上も)ダウンしている場合には、Googleがその500エラーをサイトレベルの問題として扱うことがあります。これはランキングに影響を与える恐れがあります。500エラーが繰り返されることを心配している方は、まず原因を特定し、下記の処理方法を実施してみてください。

500 Internal Server Errorの処理方法について

WordPressウェブサイトで500 Internal Server Errorが発生したときに、トラブルシューティングをどこから開始すればよいのでしょうか。困りますね。500エラーがサーバー自体に発生しますが、当社の経験上、原因が主に2種類あります。1種類はユーザーエラー(顧客側の問題)で、もう1種類はサーバー自体の異常です。今回は両方についてご説明します。
500 Internal Server Errorの一般的な原因と処理方法を是非ご確認ください。

1. ページを再読み込みする

これは当たり前のことかもしれませんが、500 Internal Server Errorが発生したときに試しておくべき最も簡単な対策の1つは、1分ほど待ち、ページを再読み込みすることです(F5またはCtrl + F5)。ホストまたはサーバーが過負荷になっているだけで、ウェブサイトがすぐに戻ってくる可能性があります。待っている間に、別のブラウザでもアクセスしてみて、ブラウザ異常を考慮から外すことができます。
もう一つのできることは、downforeveryoneorjustme.comにあなたのウェブサイトを貼り付けることです。このウェブサイトでは、あなたのウェブサイトが本当にダウンしているのか、あなたの側の問題なのか確認できます。このツールはサーバーから返されるHTTPステータスコードを確認します。「OK」を意味する200以外のステータスコードの場合は、それを表示します。

downforeveryoneorjustme
downforeveryoneorjustme

また、WordPressウェブサイトのプラグイン及びテーマを更新した直後に500 Internal Server Errorが発生することがあります。通常、正しく設定されていないホストの場合に起こる現象です。一時的なタイムアウトで、通常は数秒で自然に治ります。単にリフレッシュしてください。

2. ブラウザのキャッシュをクリアする

ブラウザのキャッシュをクリアすることも、ウェブサイトのデバッグを始める前の便利なトラブルシューティング手段の一つです。各ブラウザでの手順はこちらです:

3. サーバーのログを確認する

また、エラーログを活用することもできます。Kinstaのお客様は、MyKinstaダッシュボードのログビューアを使用し、簡単にエラーが確認できます。特にウェブサイトのプラグインに起因するエラーの場合には、非常に便利です。

500 Internal Server Error の発生時にサーバーエラーを確認する
500 Internal Server Error の発生時にサーバーエラーを確認する

あなたのホストにはロギングツールがない場合は、次のコードをwp-config.phpファイルに追加することによりロギングを有効にすることもできます。

define( 'WP_DEBUG', true );	 	 
define( 'WP_DEBUG_LOG', true );	 	 
define( 'WP_DEBUG_DISPLAY', false );

ログは通常、/wp-contentディレクトリにあります。Kinstaと同様に、「logs」という専用のフォルダがある場合もあります。

WordPressのエラーログのフォルダ(SFTP)
WordPressのエラーログのフォルダ(SFTP)

また、ApacheNGINXのログファイルも確認できます。これらのふぁいつの一般的な場所は:

  • Apache: /var/log/apache2/error.log
  • NGINX: /var/log/nginx/error.log

Kinstaのお客様には、500のエラーの合計数と頻度を把握するに当社の分析ツールもご利用いただけます。トラブルシューティングすべき発生中の異常なのか、処理済みの異常なのか確認できます。

レスポンス分析500エラーの内訳
レスポンス分析500エラーの内訳

PHPの致命的なエラーのために500エラーが発生している場合は、PHPエラー報告を有効にすることもできます。エラーが出ているファイルに次のコードを追加するだけです。Google ChromeのDevToolsのコンソールタブでファイルを特定ことができます。

ini_set('display_errors', 1);	 	 
ini_set('display_startup_errors', 1);	 	 
error_reporting(E_ALL);

または、php.iniファイルを次のように変更する必要もあるかもしれません。

display_errors = on

4. データベース接続の確立中にエラーが発生

500 Internal Server Errorは、データベース接続エラーを原因にも発生することがあります。ブラウザによりエラー表示が異なことがあります。しかし、サーバーログでは両方が 500のHTTPステータスコードを生成します
以下は、「データベース接続の確立中にエラーが発生」のブラウザメッセージの例です。接続が正常に動作していないため、ページをレンダリングするためのデータを取得できず、ページが完全に空白になります。これによりサイトのフロントエンドが破損するだけでなく、WordPressダッシュボードにさえアクセスできなくなります。

、「データベース接続の確立中にエラーが発生」メッセージの例
「データベース接続の確立中にエラーが発生」メッセージの例

なぜこれが起こってしまうのでしょうか。よくある原因をいくつか挙げます:

  • 最もよくある原因は、データベースのログイン資格が間違っていることです。WordPressウェブサイトでは、別のログイン情報を使用してMySQLデータベースに接続します。
  • データベースが壊れています。ユーザーが引き続きインストールしたり削除したりするテーマまたはプラグインが多い中を、データベースが破損することがあります。一つのテーブルが欠落及び破損しているか、または偶然に一部の情報が削除された可能性があります。
  • WordPressのインストールのファイルが破損してしまった可能性があります。ハッカーにより起こることもあります。
  • データベースサーバーに関する異常。トラフィックが急増したときにデータベースが過負荷になるか、あまりにも多くの同時接続を理由に応答がないなど、ウェブホストの問題の可能性があります。これは、同じサーバーのリソースを多くのユーザーに対して利用している共有ホスティング会社ではかなり一般的です。

WordPressの「データベース接続の確立中にエラーが発生」エラーの処理方法についての当社の詳細な記事を是非ご確認ください。

5. プラグインとテーマを確認する

サードパーティ製のプラグインとテーマは、500 Internal Server Errorを引き起こすことがあります。Kinstaがスライダープラグインをはじめ広告プラグインなどによる各種類の原因を経験したことがあります。新しいものをインストールしたり、アップデートを実行した直後にエラーが表示されるはずです。これこそが、アップデートの試験に常にステージング環境を利用すること、または少なくとも更新を1つずつ実行することをご推奨する理由の1つです。そうしないと、500 Internal Server Errorが発生したときに、原因を特定するのに時間がかかります。
トラブルシューティングするには、すべてのプラグインを無効にすることができます。プラグインを無効にするだけでは、データを失うことはありません。管理画面にアクセスできる場合は、「プラグイン」をアクセスし、「一括操作」メニューの「無効にする」を選択するだけです。これにより、すべてのプラグインが無効になります。

すべてのプラグインを無効にする
すべてのプラグインを無効にする

これで問題が解決した場合は、原因を特定する必要があります。プラグインを1つずつ起動し、起動し始めた度にウェブサイトを再読み込みします。500 Internal Server Errorが再発すると、原因となるプラグインを特定できました。そこで、プラグインの開発者に問い合わせするか、WordPressリポジトリでサポートチケットを作成することができます。
管理画面にアクセスできない場合は、FTP経由でサーバにログインし、プラグインフォルダの名前を「plugins_old」などに変更する必要があります。その後、ウェブサイトを再度確認してください。これでエラーが回復した場合には、各プラグインを1つずつテストする必要があります。プラグインフォルダの名前を「plugins」に戻し、その中の各プラグインのフォルダ名を順番に変更します。最初にステージングサイトで行っても構いません。

プラグインのフォルダ名を変更する
プラグインのフォルダ名を変更する

プラグイン、テーマ、WordPressのコアが常に最新版であるようにしてください。または、ご利用のPHPバージョンがサポートされていることもご確認ください。プラグインのコード異常が原因である場合は、WordPressの開発者に任せる必要があります。

6. WordPressのコアを再インストールする

場合によっては、特に古いウェブサイトの場合WordPressのコアファイルが破損していることがあります。プラグイン及びテーマに影響を与えることなく、WordPressのコアだけを再アップロードするのは実はとても簡単です。当社は、WordPressを再インストールする5つの方法の詳細なガイドをご用意しました。もちろん、開始する前に必ずバックアップを取ってください。以下のどちらかにジャンプしてください:

7. パーミッションエラー

サーバー上のファイルまたはフォルダーに対するアクセスパーミッションエラーにより、500 Internal Server Errorが発生することもあります。以下はWordPressのファイルとフォルダのアクセス許可に関する推奨事項をです。

  • すべてのファイルを644(-rw-r–r–)または640に設定します。
  • すべてのディレクトリは755(drwxr-xr-x)または750に設定します。
  • アップロードダイレクトリーでも、777のディレクトリを一切設定してはいけません。
  • 強化:wp-config.phpは、サーバー上の他のユーザーが読み取ることができないように、440または400に設定する必要があります。

より詳しい説明については、ファイルパーミッションの変更についてのWordPress Codexの記事を参照してください。

FTPクライアントを使用しすることによりファイルのアクセスパーミッションが確認しやすいです(下記参照)。また、ファイルが正しく設定されているかを確認するように、WordPressホスティング会社のサポートチームに連絡し、フォルダおよびファイルのパーミッションをgrepしてもらうこともできます。

SFTPでのファイルパーミッション
SFTPでのファイルパーミッション

8. PHPのメモリ制限

サーバーのPHPメモリ制限を使い果たすことにより、500 Internal Server Errorが発生する可能性もあります。その制限を増してみることも可能です。cPanel、Apache、php.iniファイル、および wp-config.php ファイルで制限を増やすのに、以下の手順に従ってください。

cPanelでPHPメモリの制限を増やす方法について

cPanelのホスティング会社をご利用の方は、PHPメモリの制限をUIから簡単に変更できます。ソフトウェアの下の「Select PHP Version」(PHPバージョンを選択)をクリックします。

PHPバージョンを選択
PHPバージョンを選択

「Switch to PHP Options.」をクリアする

PHPオプションの切り替え
PHPオプションの切り替え

次に、 memory_limit 属性をクリックしその値を変更します。最後に、「保存」をクリックします。

cPanelでPHPメモリの制限を増やす
cPanelでPHPメモリの制限を増やす

ApacheでPHPメモリの制限を増やす方法について

.htaccess ファイルは、ディレクトリのレベルまでサーバーの動作を変更できるさまざまな設定が含まれている特別な隠しファイルです。最初にFTPまたはSSH経由でウェブサイトにログイン し、ルートディレクトリに.htaccess ファイルがあるかを確認します。

.htaccessファイル
.htaccessファイル

ある場合は、そのファイルを編集することにより、PHPのメモリ制限を増やすのに必要なコードを追加することができます。64M以下に設定されている可能性が高いですが、この値を増してみてください。

php_value memory_limit 128M

php.iniファイルでPHPメモリの制限を増やす方法について

上記がなかなかできない場合は、 php.iniファイルを編集してみてください。FTPまたはSSH経由でウェブサイトにログイン し、ウェブサイトのルートディレクトリにアクセスし、 php.ini ファイルを開くか作成します。

php.iniファイル
php.iniファイル

ファイルが既に存在する場合は、次の3つの設定を検索し、必要に応じて変更します。ファイルを作成したばかりの場合、または設定が見つからない場合は、以下のコードを貼り付けることができます。もちろん、ご要求に合わせて値を変更しても構いません。

memory_limit = 128M

共有ホスティング会社の中には、上記の .htaccess ファイル設定が機能するのに php.ini ファイルにsuPHPディレクティブを追加する必要のあるものもあります。追加するのには、ウェブサイトのルートにある .htaccess ファイルを編集し、ファイルの先頭に次のコードを追加します:

suPHP_ConfigPath /home/yourusername/public_html	 	 

上記がなかなかできない場合は、ホスティング会社がグローバル設定をロックし、代わりに .user.ini ファイルを使用し設定を行っているかもしれません。.user.iniファイルを編集するには、 FTPまたはSSH経由でウェブサイトにログイン し、ウェブサイトのルートディレクトリにアクセスし、 .user.ini ファイルを開くか作成します。中には次のコードを貼り付けます:

memory_limit = 128M

wp-config.phpでPHPメモリの制限を増やす方法について

最後の方法ですが、当社のメンバーがあまり納得していない方法です。上記のすべてが失敗したときにのみ実施してください。まず、FTPまたはSSH経由でウェブサイトにログインし、通常はウェブサイトのルートにあるwp-config.phpファイルを探します。

wp-config.phpファイル
wp-config.phpファイル

wp-config.php ファイルの先頭に次のコードを追加します:

define('WP_MEMORY_LIMIT', '128M');

本当にメモリ制限の異常が発生しているかをホスティング会社に質問することもできます。Kinstaでは、New Relicなどのトラブルシューティング方法を採用し、お客様の制限異常を引き起こすプラグイン、クエリ、またはスクリプトを特定します。独自のカスタムのNew Relicキーを使用することも可能です。

New Relicを使用しデバッグ
New Relicを使用しデバッグ

9. .htaccessファイルの異常

KinstaはNginxのみを使用していますが、Apacheを採用しているWordPressホストをご利用の場合は、 .htaccess ファイルに異常が発生しているか完全に破損している可能性があります。次の手順に従って、最初から新しいものを作り直してください。
まず、 FTPまたはSSH経由でウェブサイトにログイン し、 .htaccess ファイルの名前を .htaccess_oldに変更します。

.htaccessファイルの名前を変更する
.htaccessファイルの名前を変更する

通常、このファイルを再作成するには、WordPressのパーマリンクを再保存するだけです。ただし、500 Internal Server Errorが発生したときにはWordPressのダッシュボードにアクセスできない為、上記ができません。したがって、新しい .htaccess ファイルを作成し、次の内容を入力し、サーバーにアップロードする必要があります。

# BEGIN WordPress	 	 
RewriteEngine On	 	 
RewriteBase /	 	 
RewriteRule ^index\.php$ - [L]	 	 
RewriteCond %{REQUEST_FILENAME} !-f	 	 
RewriteCond %{REQUEST_FILENAME} !-d	 	 
RewriteRule . /index.php [L]	 	 
# END WordPress

マルチサイト用のデフォルトの.htaccessファイルなど、その他の例については、WordPress Codexをご参照ください。

10. CGI/Perlスクリプトのコーディングまたは構文エラー

CGI及びPerlに引き起こされた500エラーの数は、従来より減ってきました。一方、特にワンクリックCGIスクリプトの多いcPanelをご利用の方の為には、言及する価値はあります。Stack OverflowのAEMは次のように述べています:

CGIは、PHP、mod_perlなどApache拡張、Java EE、Struts、Springなどの様々なフレームワークのJava、Django、Ruby on RailsなどのPythonベースのフレームワークなど、その他のRubyフレームワーク、またはMicrosoftの技術といった幅広いWebプログラミング技術に置き換えられました。

CGIスクリプトをご利用の場合の工夫をいくつかご紹介します:

  • 編集時には必ず、Atom、Sublime、Notepad++などのプレーンテキストエディタを使用してください。これにより、ASCII形式が守られています。
  • CGIスクリプトとディレクトリでchmod 755の正しいパーミッションが使用されているかを確認してください。
  • サーバーのcgi-binディレクトリに、CGIスクリプトをASCIIモードでアップロードしてください。(モードはFTPエディタで選択可能)
  • スクリプトに必要なPerlモジュールがインストール済みで、サポートされていることを確認してください。

11. サーバー異常(ホスティング会社に問い合わせ)

最後に、PHPのタイムアウト及びサードパーティ製プラグインの致命的なPHPエラーによりも500 Internal Server Errorが発生する可能性があるため、WordPressホスティング会社に連絡し問い合わせることもできます。これらのエラーは、専門家がいないとトラブルシューティングしにくい場合があります。ここで、プロでない方だと分かりにくい500のHTTPステータスコードを引き起こすサーバー上のエラーのよくある例をいくつか示します。

PHP message: PHP Fatal error: Uncaught Error: Call to undefined function mysql_error()...
PHP message: PHP Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in /www/folder/web/shared/content/plugins/plugin/functions.php:525

当社はKinstaのすべてのお客様のウェブサイトを監視し、このようなエラーが発生したときに自動的に通知を受けます。これにより、積極的に対応し、すぐにでも問題解決を開始できます。また、各サイトに対して、LXDで管理されたホストと、LXCソフトウェアコンテナを利用しています。つまり、すべてのWordPressサイトが、それを運営するのに必要なすべてのソフトウェアリソース(Linux、Nginx、PHP、MySQL)を持つ、独自の独立したコンテナに格納されています。リソースは100%プライベートであり、他の誰かと(それどころか自サイト内でも)共有されることはありません。
通常500エラーではなく、504エラーを引き起こしますが、PHPのタイムアウトは、PHPワーカーの不足から発生する可能性もあります。PHPワーカーというのは、ウェブサイトが同時に処理できるリクエストの数を決定します。簡単に言えば、キャッシュされていないウェブサイトへのすべてのリクエストは、PHPワーカーにより処理されます。
PHPワーカーが忙しいとキューを構築します。PHPワーカーの制限を超えてしまうときに、キューは古いリクエストを削除しはじめます。これにより500エラーま処理できないリクエストが発生する恐れがあります。当社のPHPワーカーについての詳細な記事も是非ご確認ください。

ウェブサイトを監視する

このエラーの再発をご心配の方は、updown.ioなどツールを利用することにより、ウェブサイトを監視し、再発のときに直ちに通知してもうこともできます。ツールが定期的にHTTP HEADリクエストをあなたの選択したURLに送信します。単にホームページを選択した方がよいでしょう。確認頻度は以下のどちらかを設定できます:

  • 15秒
  • 30秒
  • 1分
  • 2分
  • 5分
  • 10分

ウェブサイトがダウンしたときに、メール通知します。以下はその例です。

500エラーのメール通信
500エラーのメール通信

不具合のあるプラグインをデバッグしようとしている場合、またはサーバーを混雑させる傾向のある共有ホスティング会社をご利用の場合には特に便利です。例え夜中でもウェブサイトがダウンしている頻度の証拠にもなります。これこそは、必ずマネージドWordPressホスティング会社のご利用をお勧めする理由です。マネージドWordPressホスティングを選ぶ9つの理由についての当社の記事も是非ご確認ください。

まとめ

500 Internal Server Errorはいつも不便ですが、時価は是非上記のウェブサイトをすぐにでも復帰できるトラブルシューティングの手段を実施してみてください。通常、これらのエラーは、サードパーティ製のプラグイン、致命的なPHPエラー、データベース接続の異常、.htaccessファイルの制限異常、PHPのメモリ制限異常、および時にはPHPのタイムアウトにより発生していることを覚えておいてください。
見逃したことはありますか。500 Internal Server のいい処理方法をご存じでしたら、是非コメントを書いて教えてください。

Brian Jackson

Brianの最大の情熱の一つは10年以上使用してきたWordPressです。複数のプレミアムプラグインさえ開発しています。Brianの趣味はブログや映画やハイキングなどです。TwitterでBrianとつながりましょう。