「500 Internal Server Error」とは?意味・原因と解決方法

WebサイトやYouTubeを閲覧している時に、「500 Internal Server Error」(以下500エラーと呼びます)というメッセージが表示されて閲覧できなかった経験はあるでしょうか。またブログ作成で愛用されているWordPressでも500エラーが発生する場合があります。
具体的にどういったエラーなのかメッセージからは想像がしにくいですが、多くの場合はサーバーやプログラムに起因するエラーです。
この記事では原因をひとつひとつ追って解決方法を提示していきます。

500 Internal Server Error(インターナルサーバーエラー)とは?

500 Internal Server Error
500 Internal Server Error(インターナルサーバーエラー)とは、Webサーバーでエラーが発生しており、Webサイトが正しく表示できないことを表すエラーコードです。閲覧しようとしたWebサイトに関するプログラム(PHP)やプログラムを動かす仕組み(CGI)へのアクセスが行われた際、プログラムの処理が正常に完了できない場合に500エラーが発生します。

エラーコード500の意味とは?

エラーコード500の意味とは、「サーバーエラー」です。数字は「HTTPレスポンスステータスコード(※)」を表しており、500はさらに500、501、502…のように細かく分類され、それぞれ異なる意味がつけられています。このエラーは、通常他に適切なエラーコードが該当しない場合にサーバーによって返されます。
※HTTPレスポンスステータスコード:Webサーバーが受け取ったHTTPリクエストの状態・結果(ステータス)を返す数字3桁のコードのこと

ステータスコードは以下でも解説しています。

内部サーバーエラー

内部サーバーエラーとは、Webサーバーで予期せぬ状態が発生したため、リクエストを実行できなかったという意味です。「Internal Server Error」は「内部サーバーエラー」と訳すことができます。

PHPエラーとCGIエラー

エラー原因の一要因として、PHPエラーとCGIエラーが挙げられます。PHPはテキストエディタなどで編集されるソースコードをプログラムで処理しており、後述のWordPressにも使われているプログラム言語です。このソースコードの記述に問題があると処理中にエラーとなります。
一方、CGIではサーバーがWebページを表示させるためにPHPなどを読み込みプログラムを処理しています。処理が増加し過ぎるとサーバーのリソース(余裕)が無くなりエラーとなります。

WordPress「http error 500 このページは動作していません」

http error 500 このページは動作していません
WordPressでも「http error 500 このページは動作していません」というエラーメッセージが表示されることがあります。これは、WordPressの元になっているPHPで何らかの原因でエラーが発生し、正常なページを表示できなくなってしまっています。真っ白のページが表示された場合にも上記の500 Internal Server Errorが裏側で発生していて、原因が同じエラーであることも多いです。
原因としては幾つかの問題が考えられます。

・サーバーの更新がされていない
→決済トラブル等でサーバーの更新ができていない可能性があります。
・ドメインの使用期限が切れている
→上記サーバーと同様に、更新ができていない可能性があります。またドメインのwhois情報の更新や確認がとれていないこともあります。
・WordPress本体の更新が失敗している
→WordPressのアップデートは手動または自動更新によって行うことができますが、正常に行えなかった可能性があります。もしくは、しばらく更新しておらず本体が古くなっていることが原因の場合もあります。
・プラグインの更新に失敗している
→WordPress本体と同様に、更新ができていない可能性があります。
・プラグインやテーマを更新した直後である
→プラグインやテーマを更新した直後に500エラーが発生することがあります。この場合は一時的にタイムアウトしているだけなので、再読み込みをすればすぐに復活します。
・function.phpの設定に誤りがある
→テーマファイルの中に存在するfunction.phpというファイルが編集されたことで、ページが表示されなくなる場合があります。
・PHPのバージョンに問題がある
→サーバーで使用しているPHPのバージョンが、WordPress本体やプラグイン、テーマと相性が悪い可能性があります。
・パーミッションの設定に問題がある
→サーバーに置かれたディレクトリやファイルにアクセスする権限に誤りがあり、プログラムの処理が出来ない状況です。

ネットワークに問題が発生しました500

ネットワークに問題が発生しました500
「ネットワークに問題が発生しました500」というエラーメッセージのパターンもあります。AndroidスマートフォンやAndroidタブレットでYouTubeアプリの動画を視聴していた際に、このようなエラーメッセージが表示され動画が再生できなくなる場合があります。主な原因はYouTubeアプリのバージョンが古い、アプリのキャッシュが残っていることなどが挙げられます。
一方ではユーザーの問題ではなく、サーバーに障害が発生している可能性もあります。

500 Internal Server Error(インターナルサーバーエラー)の原因

500 Internal Server Error(インターナルサーバーエラー)の原因はいくつか考えられ、ユーザー、サーバーに起因するものに分けられます。

原因1.アクセスが集中している

プログラムへの同時アクセス数が増えたためサーバーに負荷がかかり、PHPやCGIが実行できない場合です。断続的にエラーが続くようであればサーバー側で閲覧制限をかけていることが多いです。

原因2.プログラムに誤りがある

ソースコードの記述に文法エラーやタイプミスがある、プログラムを動かすためのモジュールに問題がある、プログラムのバージョンが古いなどです。

①CGIファイルのPerlパスが間違っている
→CGIファイルの1行目に記述するPerlのパスが間違っている可能性があります。

②CGIファイルの改行コードに誤りがある

(1)改行コードがサーバーに適合していない
→CGIファイルの改行コードがサーバーに適合していない場合にエラーが発生します。

(2)編集保存で改行コードが「CR」に変わってしまった
→CGIファイルをMac環境で編集した際に、改行コードが「CR」に変わってしまったことが原因です。
改行コードには「LF」(Unix形式)「CR+LF」(Windows形式)「CR」(Mac形式)の3種類がありますが、このうち「CR」の場合にエラーとなります。

また、ZIPなどの圧縮ファイルをMacの解凍ツールを使って解凍した場合にも改行コードが変わってしまうことがあります。

③CGIファイルの文字コードが「UTF-8」でBOMが含まれる
→Windowsのメモ帳で文字コードを「UTF-8」にして保存した場合、BOM(Byte Order Mark)と呼ばれる不可視の記号がデータの先頭に挿入されてしまうことがあり、エラーの原因となります。
注)2018年末以降のWindows10アップデートでは、メモ帳でUTF-8N( BOM無し)が初期設定になっており、エラーを回避することが可能です。

④文法エラーがある
→タイプミスや環境設定の編集などにより文法エラーが見つかった場合、500エラーが発生します。

⑤モジュールが不足している
→プログラムを動かすためのモジュール(プラグイン)の使用がサーバーで許可されてない可能性があります。

⑥.htaccessに問題がある
→ディレクトリに置かれた.htaccessファイルに何らかの問題が起きている場合、エラーが発生します。

⑦Perlのバージョンが低すぎる
→Perlのバージョンが5.005未満の場合、エラーが発生します。また、「すぐ使えるCMS」のバージョンが2.x以下かつPerlのバージョンが5.10以上の場合もエラーとなります。

⑧Apacheのバージョンが2.4以上である
→WebサーバーでApacheのバージョンが2.4以上の場合、初期設定でエラーが発生する場合があります。

原因3..htaccessの記述に誤りがある

.htaccess(Apacheなどのソフトウェア環境で使用可能なディレクトリ単位の設定ファイルのこと)の記述に誤りがある可能性が高いです。記述そのものが間違っている場合と、PHPに関する各種設定を.htaccess上に記述してしまっている場合です。

原因4.パーミッションに誤りがある

CGIのあるディレクトリやファイルのパーミッション(読み込み[r]・書き込み[w]・実行[x]のためのアクセス権限のこと)が適切に設定されていない可能性があります。
また使用しているサーバーによってもパーミッションのルールが決められていることがあり、そのルールに反している場合にもエラーとなります。例えば、ディレクトリのパーミッションが777(rwxrwx)になっていると多くのサーバーでエラーとなる可能性が高いです。

☆補足)パーミッションについて
パーミッションは「所有者」「所有グループ」「その他」の3つのセクションに区別され、それぞれのアクセス権限は記号または数値で表記します。記号はrwxr-xr-xのようにセクション順につなげて表記し、数値の場合はセクション毎に足した数値で表します。基本的に、数値は低い方がアクセス権限が厳しくセキュアな状態となります。

記号 数値 権限
r 4 読み込み可
w 2 書き込み可
x 1 実行可
- 0 不可

例)rwxr-xr-x は (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1) で 755 と表記する

500 Internal Server Error(インターナルサーバーエラー)の解決方法

以下、500 Internal Server Error(インターナルサーバーエラー)の発生原因ごとに解決方法を説明致します。

サイトに重大な影響を及ぼす可能性がある編集は必ずバックアップを取って自己責任で行ってください。

解決方法1.アクセスの集中が終わるまで待つ

プログラムへのアクセスが集中しているため、しばらくお待ちになってからページを再読み込みして下さい。多くのブラウザでは「F5」または「Ctrl+F5」でページを更新することができます。アクセス集中が一時的である場合、稼働中のプロセスが終了してサーバーのリソースが復活すればエラーは解消されます。

解決方法2.プログラムの誤りを修正

ソースコードの構文エラーやタイプミス、プログラムのファイル構成、バージョンなどを確認し必要に応じて修正します。

①CGIファイルのPerlパスが間違っている
→CGIファイルの1行目に記述するPerlのパスに正しいパスを設定します。多くのサーバーではPerlのパス(またはプログラムのコマンドパス)が以下のように設定されています。

(1)UNIX系サーバー(Linuxディストリビューション、FreeBSDなど)の場合

#!/usr/local/bin/perl --
または
#!/usr/bin/perl --

(2)Windows系サーバー(IIS、Apacheなど)の場合
#!C:/Perl/bin/perl.exe --

②CGIファイルの改行コードに誤りがある

(1)改行コードがサーバーに適合していない
→ファイル1行目のPerlパスの後に「--」(半角ハイフン2つ)を追加して下さい。

(2)編集保存で改行コードが「CR」に変わってしまった
→編集ツールで改行コードを「LF」(Unix形式)または「CR+LF」(Windows形式)に指定して保存して下さい。もしくは、改行コードが指定できるオンラインのテキストエディタを使用して下さい。

すぐ使える多言語対応エディタ
http://multilingual-editor.sugutsukaeru.jp/

・改行コードとOSの関係

エディタ

③CGIファイルの文字コードが「UTF-8」でBOMが含まれる
→保存時にBOMが挿入されないよう、「UTF-8 BOMなし」形式で保存できる編集ツールを使用して保存し直して下さい。もしくは、オンラインのテキストエディタを使用して下さい。(同上)

Windows10のアップデートで改良されたメモ帳の文字コード指定

④文法エラーがある
→文法チェックを行って下さい。参考書と照らし合わせたり、Googleで「文法チェッカー」と検索すると文法チェックができるサービスで確認可能することができます。
⑤モジュールが不足している
→サーバー管理者や運営会社にお問合せ下さい。
⑥.htaccessに問題がある
→試しにサーバーに存在しないファイル名のURLにアクセスしてみて下さい。.htaccessファイルに問題がなければ「404 Not Found」または「見つかりません」エラーが発生するはずですが、変わらず「500 Internal Server Error」エラーが出続ける場合は.htaccessの記述を見直して下さい。
また、以下のようなPHPを使うための記述が見つからない場合、追記する必要があります。

(1)PHPのバージョンが5.Xの場合
AddHandler x-httpd-php5 .php .phps

(2)PHPのバージョンが7.Xの場合
AddHandler x-httpd-php5 .php .phps

⑦Perlのバージョンが低すぎる
→Perlのバージョンを5.005以上にバージョンアップします。また、すぐ使えるCMSのバージョンが2.x以下でPerlのバージョンが5.10以上の場合、すぐ使えるCMSの方のバージョンを3.0以上にバージョンアップして下さい。

⑧Apacheのバージョンが2.4以上である
→以下の場所に.htaccessファイルがあれば内容を書き換える必要があります。

data/.htaccess
templates/.htaccess
削除する行の内容:Order Allow,Deny
追加する行の内容:Requre all denied

解決方法3..htaccessの記述を修正する

.htaccessファイルの記述内容をよく確認して下さい。Digest認証やSSI、アクセス制限の設定についてはApacheのバージョンによって設定方法に差異があります。また、設定されているファイルパスの間違いや許可されていないオプションを記述していないかどうかも確認して下さい。

解決方法4.パーミッションの誤りを修正

CGIディレクトリまたはCGIファイルのパーミッションを適切に設定します。多くのサーバーでは以下のようなパーミッションが推奨されています。
ディレクトリやCGI実行ファイルなら「rwxr-xr-x(755)」か「rwx---r-x(705)」
HTML、PHP、画像、圧縮ファイル、.htaccessファイルなら「rw-r--r--(644)」
ライブラリやテキスト、ログデータなら「rw-------(600)」

YouTube

YouTubeを視聴しているブラウザまたはアプリのキャッシュを削除します。大規模障害の場合は復旧するまでお待ち下さい。

Twitter

Twitterを閲覧しているブラウザまたはアプリのキャッシュを削除します。Twitterのサーバーがダウンしている場合は復旧するまでお待ち下さい。

まとめ

500エラーは様々な原因で発生するため、エラーがどのような原因で発生しているかを確認した上で対処する必要があります。あなたがユーザの立場であるなら、閲覧環境の見直しをすると良いでしょう。あなたが管理者の立場であるなら、プログラムの記述やサーバー環境のバージョンが適切であるかどうかをチェックして正常な状態を保つようにしましょう。