サーバーで問題が発生しました。
使いどころ
未処理の例外。詳細はログに記録し、クライアントには漏らさないようにします。
よくある原因と対処法
500 は、サーバー上で処理されない例外が発生したか、設定に誤りがあることを意味します。まずはリクエスト時刻のログを確認しましょう。アプリケーションのスタックトレース、PHP や Python のエラーログ、journalctl、docker logs、CloudWatch などです。よくある原因は、null や undefined の値、データベースクエリの失敗や未適用のマイグレーション、本番環境での環境変数の欠落、.htaccess の構文エラー、スクリプトのパーミッションの誤りです。
500 をデバッグしやすくしましょう。リクエスト ID をヘッダーとボディで返し、スタックトレースとともにログに記録し、Sentry のようなトラッカーにエラーを送ります。本番環境では、スタックトレースをクライアントに見せてはいけません。クライアントの誤りに 500 を使わないでください。検証の失敗は 4xx に属するものであり、そうすることで 5xx のアラートが意味を保てます。バックオフ付きの再試行は一時的な障害には効果がありますが、決定的なバグは毎回失敗します。
サーバーエラー (5xx)
5xx はサーバーエラーです。リクエストに問題がなくても、サーバーやその背後の何かが失敗しています。アラートを設定しておく価値があります。
レスポンスでの表示
HTTP/1.1 500 Internal Server Error返し方
| Node.js / Express | res.status(500).end() |
|---|---|
| Python / Flask | return '', 500 |
| nginx | return 500; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/