503 Service Unavailable

サーバーは現在リクエストを処理できません。

使いどころ

メンテナンスまたは過負荷。復旧時期がわかっている場合は Retry-After を含めます。

よくある原因と対処法

サーバーが意図的に、または一時的にリクエストを拒否しています。メンテナンスモード、過負荷、すべてのバックエンドがヘルスチェックに失敗している、あるいはレート制限(nginx の limit_req はデフォルトで 503 を返します)などです。ロードバランサーでは、503 はたいてい登録済みまたは正常なターゲットがないことを意味します。ターゲットのヘルス状態、ヘルスチェックのパスとポート、新しいデプロイがそれに合格しているかを確認してください。Kubernetes の Ingress も、Service に準備完了のエンドポイントがない場合に同じ応答を返します。

計画メンテナンスでは、メンテナンスページを 200 で返すのではなく、Retry-After 付きの 503 を返しましょう。そうすれば検索エンジンがページをインデックスに残します。Google は 1〜2 日程度の 503 なら許容しますが、それより長い停止では URL が削除されることがあります。クライアントはバックオフしながら再試行し、Retry-After に従うべきです。ヘルスチェックは軽く保ち、遅いデータベース 1 つのせいですべてのインスタンスが一斉にローテーションから外れないようにしましょう。

サーバーエラー (5xx)

5xx はサーバーエラーです。リクエストに問題がなくても、サーバーやその背後の何かが失敗しています。アラートを設定しておく価値があります。

レスポンスでの表示

HTTP/1.1 503 Service Unavailable

返し方

Node.js / Expressres.status(503).end()
Python / Flaskreturn '', 503
nginxreturn 503;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く