500 Internal Server Error
使い方
500 Internal Server Error ステータスコードは、サーバー側での一般的な障害を示します。このエラーは広い範囲を指すため、具体的な原因は環境によって異なります。Web サーバーに問題が発生しており、サーバー管理者が問題を解決するための対応を取る必要があります。
このエラーはしばしば、1つ以上のファイルの権限の問題、スクリプトのタイムアウト、.htaccess ファイルの破損に起因します。確かなのは、HTTP リクエストが実行されなかったということだけです。
注意
エンドユーザーにとって、500 エラーはクライアントの落ち度ではありません。できることは、しばらく待ってから再試行するか、サイトの管理者に連絡することだけです。ほとんどの 500 エラーは一時的なもので、リソースの枯渇やデプロイの問題といった一過性の状況によって引き起こされます。
注意
スタックトレース、データベースのクエリ、ファイルパス、フレームワークのバージョンを漏らす 500 レスポンスは、攻撃者に有用な情報を露出させます。本番サーバーは汎用的なエラーページを返し、詳細はサーバー側にのみ記録しなければなりません。
SEO への影響
Googlebot は 5xx エラーを、サイト全体のクロール頻度を一時的に低下させるシグナルとして扱います。以前にインデックスされていた URL は当初は保持されますが、ダウンタイムが長引くと Google はそれらをインデックスから削除します。500 レスポンスとともに返されたコンテンツは無視されます。この点において、Google は 500、502、503 を同じように扱います。robots.txt ファイルでの 5xx エラーははるかに深刻で、サイトの他のすべてのページが 200 を返していても同様です。Google は最大 12 時間クロールを停止し、その後最大 30 日間はキャッシュされたコピーにフォールバックします。エラーが続くと、Google はサイトを完全にインデックスから除外します。Bingbot も 5xx レスポンスをクロールの失敗として扱います。5xx エラーが継続すると、Bing でのインデックス登録が妨げられます。
例
クライアントがリソースを要求し、サーバーはリクエストが満たされないことを示す 500 Internal Server Error ステータスコードで応答します。
リクエスト
GET /news.html HTTP/1.1
Host: example.com
レスポンス
HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=UTF-8
Content-Length: 139
<html>
<head>
<title>Request Failed</title>
</head>
<body>
<p>The request failed due to a server error.</p>
</body>
</html>
対処方法
まずエラーログから始めます。nginx では /var/log/nginx/error.log を確認します。Apache では /var/log/apache2/error.log または /var/log/httpd/error_log を確認します。ログのエントリは、ほぼ必ず失敗したファイルと行番号を示します。
一般的な根本原因とその対処:
原因を特定したら、修正をデプロイし、再発しないかエラーログを監視します。ユーザーから報告される前に 500 の急増を捉えられるよう、ログのアラートを設定します。
コードリファレンス
.NET
HttpStatusCode.InternalServerError
Rust
http::StatusCode::INTERNAL_SERVER_ERROR
Rails
:internal_server_error
Go
http.StatusInternalServerError
Symfony
Response::HTTP_INTERNAL_SERVER_ERROR
Python3.5+
http.HTTPStatus.INTERNAL_SERVER_ERROR
Java
java.net.HttpURLConnection.HTTP_INTERNAL_ERROR
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_SERVER_ERROR
org.apache.hc.core5.http.HttpStatus.SC_INTERNAL_SERVER_ERROR
Angular
@angular/common/http/HttpStatusCode.InternalServerError