EasyBot

EASYBOT GUIDE

504 Gateway Timeoutとは?タイムアウトの原因と直し方

504 Gateway Timeoutが起きる仕組みと、Cloudflare・Nginx・アプリ間の接続で確認するタイムアウト対策を解説します。

504 Gateway Timeoutは、ゲートウェイやリバースプロキシが上流サーバーから時間内に応答を受け取れなかった状態です。上流アプリが遅い、外部APIが停止している、タイムアウト値が合っていない時に発生します。

502との違い

502は上流から無効な応答や接続失敗を受け取った状態、504は応答を待ったものの期限内に届かなかった状態です。どちらもプロキシと上流のログを同じ時刻で照らし合わせます。

  • 発生時刻とリクエストIDを控える
  • プロキシ側のupstream timeoutログを探す
  • アプリ側の処理時間と外部通信時間を比較する

長い処理を調べる

データベースの遅いクエリ、同期的なファイル処理、応答しない外部APIがよくある原因です。処理を段階ごとに計測し、どこで時間を使ったかを記録します。

  1. DBのクエリ時間と接続プールを確認する
  2. 外部APIごとに短い接続・応答タイムアウトを設定する
  3. 大量処理をバックグラウンドジョブへ移す

タイムアウト値の整合

プロキシの上限だけを大きくしても、アプリやロードバランサーが先に接続を切れば改善しません。各層の時間制限と再試行を見直します。

  • クライアント・プロキシ・アプリの上限を一覧にする
  • 処理の最大時間に合わせて無理のない値を設定する
  • クライアント再試行で処理が重複しないようにする

利用者側の対応

利用者は再読み込みを連打せず、時間を置いて再試行します。送信フォームがある場合は、処理が完了していないか履歴を確認してから再送してください。

  • 短時間待って一度だけ再試行する
  • 処理結果や通知が届いていないか確認する
  • 継続する場合はURLと発生時刻を運営へ伝える