Slate Errors

Server Error

504

Gateway Timeout

— ゲートウェイのタイムアウト

まずは確認: よくある原因 TOP3

  1. 上流アプリの処理が遅い
    重い SQL、外部 API 呼び出し、N+1 などで応答が間に合っていない
  2. ネットワーク経路の遅延・断
    VPC 間ルーティング、DNS、TLS ハンドシェイクの引っかかり
  3. プロキシ側のタイムアウトが短すぎる
    nginx の proxy_read_timeout やロードバランサ設定の見直し

何が起きたのか?

504 は「中継役のサーバーが、上流の本体サーバーからの返事を待ちきれずに諦めた」というサインです。 教室で言えば、廊下に立つ伝令係が、隣の校舎の先生に質問を持ち込んだまま、いつまで経っても戻ってこない——そんな状況に近いかもしれません。中継役は仕方なく、教室に「今回は答えがありませんでした」と返します。

502 と似ていますが、性質が違います。502 が「壊れた返事が返ってきた」なら、504 は「返事自体が来なかった」。前者は上流の応答内容の問題、後者は上流の応答時間の問題です。

黒板からのひとこと

授業で「他の先生に聞いてくる」と言って出ていったきり、戻ってこない——生徒たちはずっと待つわけにはいきません。やがて誰かが「今日は無理そう」と判断する。これが 504 です。

判断が早いほうが、教室全体の混乱は小さくなります。だからプロキシは時間制限を持って、上流が応答を返さなければ「ここまで」と区切る。原因は、たいてい上流側にあります。

解決への歩み

大丈夫、次はこうしてみよう:

  1. 時間を置いて再アクセス:上流側の一時的な詰まりが解消することがある
  2. 重い操作を軽くする:ページネーション、フィルタ、必要最小限のデータ取得に切り替える
  3. 状況を管理者に伝える:時刻、URL、毎回再現するか、特定パラメータで起きるか
  4. 上流アプリのレイテンシを調査(管理者向け):APM のスロークエリ、外部 API の応答時間、タイムアウト値の整合性を順に

実際にはこう見える

$ リクエスト

curl -i https://example.com/some/path

↓ レスポンス

HTTP/1.1 504 Gateway Timeout
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html><body><h1>504 Gateway Timeout</h1></body></html>

似ているケース

もっと知りたい