あの恐ろしい「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条)

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が発生するときによくあることです。

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

readmeの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以外のステータスコードの場合は、それを表示します。
また、WordPressウェブサイトのプラグイン及びテーマを更新した直後に500 Internal Server Errorが発生することがあります。通常、正しく設定されていないホストの場合に起こる現象です。一時的なタイムアウトで、通常は数秒で自然に治ります。単にリフレッシュしてください。
2. ブラウザのキャッシュをクリアする
ブラウザのキャッシュをクリアすることも、ウェブサイトのデバッグを始める前の便利なトラブルシューティング手段の一つです。各ブラウザでの手順はこちらです:
- 一つのページをすべてのブラウザで強制的に更新する方法について
- Google Chromeのキャッシュをクリアする方法について
- Mozilla Firefoxのキャッシュをクリアする方法について
- Safariのキャッシュをクリアする方法について
- Internet Explorerのキャッシュをクリアする方法について
- Microsoft Edgeのキャッシュをクリアする方法について/a>
- Operaのキャッシュをクリアする方法について
3. サーバーのログを確認する
また、エラーログを活用することもできます。Kinstaのお客様は、MyKinstaダッシュボードのログビューアを使用し、簡単にエラーが確認できます。特にウェブサイトのプラグインに起因するエラーの場合には、非常に便利です。

あなたのホストにはロギングツールがない場合は、次のコードをwp-config.phpファイルに追加することによりロギングを有効にすることもできます。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
ログは通常、/wp-contentディレクトリにあります。Kinstaと同様に、「logs」という専用のフォルダがある場合もあります。

また、ApacheとNGINXのログファイルも確認できます。これらのふぁいつの一般的な場所は:
- Apache: /var/log/apache2/error.log
- NGINX: /var/log/nginx/error.log
Kinstaのお客様には、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つの方法の詳細なガイドをご用意しました。もちろん、開始する前に必ずバックアップを取ってください。以下のどちらかにジャンプしてください:
- 既存のコンテンツを削除せずにWordPressダッシュボードからWordPressを再インストールする方法について
- 既存のコンテンツを削除せずにFTPでWordPressを手動で再インストールする方法について
- 既存のコンテンツを削除せずにWP-CLIでWordPressを手動で再インストールする方法について
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してもらうこともできます。

8. PHPのメモリ制限
サーバーのPHPメモリ制限を使い果たすことにより、500 Internal Server Errorが発生する可能性もあります。その制限を増してみることも可能です。cPanel、Apache、php.iniファイル、および wp-config.php
ファイルで制限を増やすのに、以下の手順に従ってください。
cPanelでPHPメモリの制限を増やす方法について
cPanelのホスティング会社をご利用の方は、PHPメモリの制限をUIから簡単に変更できます。ソフトウェアの下の「Select PHP Version」(PHPバージョンを選択)をクリックします。

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

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

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

ある場合は、そのファイルを編集することにより、PHPのメモリ制限を増やすのに必要なコードを追加することができます。64M以下に設定されている可能性が高いですが、この値を増してみてください。
php_value memory_limit 128M
php.iniファイルでPHPメモリの制限を増やす方法について
上記がなかなかできない場合は、 php.ini
ファイルを編集してみてください。FTPまたはSSH経由でウェブサイトにログイン し、ウェブサイトのルートディレクトリにアクセスし、 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
ファイルの先頭に次のコードを追加します:
define('WP_MEMORY_LIMIT', '128M');
本当にメモリ制限の異常が発生しているかをホスティング会社に質問することもできます。Kinstaでは、New Relicなどのトラブルシューティング方法を採用し、お客様の制限異常を引き起こすプラグイン、クエリ、またはスクリプトを特定します。独自のカスタムのNew Relicキーを使用することも可能です。

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

通常、このファイルを再作成するには、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分
ウェブサイトがダウンしたときに、メール通知します。以下はその例です。
不具合のあるプラグインをデバッグしようとしている場合、またはサーバーを混雑させる傾向のある共有ホスティング会社をご利用の場合には特に便利です。例え夜中でもウェブサイトがダウンしている頻度の証拠にもなります。これこそは、必ずマネージドWordPressホスティング会社のご利用をお勧めする理由です。マネージドWordPressホスティングを選ぶ9つの理由についての当社の記事も是非ご確認ください。
まとめ
500 Internal Server Errorはいつも不便ですが、時価は是非上記のウェブサイトをすぐにでも復帰できるトラブルシューティングの手段を実施してみてください。通常、これらのエラーは、サードパーティ製のプラグイン、致命的なPHPエラー、データベース接続の異常、.htaccessファイルの制限異常、PHPのメモリ制限異常、および時にはPHPのタイムアウトにより発生していることを覚えておいてください。
見逃したことはありますか。500 Internal Server のいい処理方法をご存じでしたら、是非コメントを書いて教えてください。
コメントを残す