画像ツール一覧

503 Service Unavailable

503 Service Unavailable

運用・現場

アクセス集中やサーバーのメンテナンスなどにより、サーバーが一時的にリクエストを処理できない状態を示すHTTPステータスコードです。

🐾 猫で例えると?

お互いのモフモフに埋もれて爆睡し、一切の反応がない猫たち 503 Service Unavailable
503: 「サーバー状態:爆睡中につきビジー(503)」

猫が眠っていて遊びの誘いに応じられない状態を「ただいま休憩中」と伝えるイメージです。ただしHTTPの503は完全な無反応ではなく、「今は処理できない」という応答が返ってきている点が違います。

サーバーも同じです。一度にたくさんの人がアクセスしすぎて処理が追いつかなくなったり、中を掃除(メンテナンス)していたりすると、リクエストに対して「今は対応できません。後でまた来てください」とお返事をするのです。これが503エラーの正体です。

🐾 PR

💻 IT現場における「503 Service Unavailable」とは?

503エラーは、404エラー(ページが見つからない)とは異なり、サーバー自体は存在していますが、「一時的な理由」でサービスを提供できないことを示します。ここでの「一時的」というのがポイントで、問題が解決すれば再びアクセス可能になることが期待される状態です。

現場では、テレビ放映やSNSでの拡散による「スパイクアクセス(急激な負荷上昇)」が発生した際によく見られます。また、データベースの更新やバックアップのために意図的にこのステータスを返し、ユーザーに「メンテナンス中であること」を伝えるのにも使われます。

⚠️ 503エラーの仕組みと注意点

Retry-Afterヘッダーには、再試行までの秒数または日時を指定できます。再試行の目安であって、その時刻の復旧保証ではありません。ブラウザーが必ず自動再読み込みするわけでもなく、クライアント側の実装によって扱いが異なります。

メンテナンス時の実装例

一時的なメンテナンス画面には、正常なコンテンツを示す200ではなく、状況に合った503を返します。次は初期化済みのExpressアプリで、通常のルートより前に置く断片です。Retry-Afterの値は運用上の見込みに合わせます。

// Node.js/Expressでのメンテナンスモードの実装例
app.use((req, res, next) => {
  if (process.env.MAINTENANCE_MODE === 'true') {
    res.setHeader('Retry-After', '3600'); // 1時間後に再開予定
    return res.status(503).send('猫が爆睡中のためメンテナンス中です。');
  }
  next();
});

503が続くと、Googleのクロール頻度は低下し、長期間続くURLはインデックスから外れる場合もあります。ヘッダーを付けるだけで検索評価を守れるわけではないため、復旧後に通常の応答へ戻ったことまで確認します。

🛠️ 503エラーを防ぎ、賢く対処するためのポイント

ユーザーに503を見せない、あるいは見せても不快感を与えないための運用術が重要です。

眠る猫には休息が必要ですが、想定外の503は調査が必要なサインです。発生時刻、負荷、依存サービスの状態を確認し、再試行の集中でさらに負荷を増やさないように対応しましょう。