EasyBot

EASYBOT GUIDE

HTTP 502と504の違い|Bad GatewayとGateway Timeoutを切り分ける

502 Bad Gatewayと504 Gateway Timeoutを比較し、接続失敗と応答遅延をログから見分ける方法を紹介します。

502と504はどちらもプロキシやゲートウェイと上流サーバーの間で起きるエラーですが、502は無効な応答や接続失敗、504は応答待ちの時間切れを示します。

502が示す状態

上流へ接続できない、接続先ポートが違う、上流が不正なHTTP応答を返した時に発生します。プロキシが解決したホストと実際の待受ポートを確認します。

  • アプリとコンテナが起動しているか確認する
  • upstreamのホスト名とポートを確認する
  • プロキシログの接続拒否や無効応答を見る

504が示す状態

上流に接続はできても、処理が時間内に終わらない状態です。遅いクエリや外部API、長時間処理を計測し、非同期化や処理量削減を検討します。

  1. アプリ処理と依存先の応答時間を計測する
  2. 外部APIへタイムアウトを設定する
  3. 長いタスクをキュー処理へ移す

共通する確認

要求の時刻、URL、リクエストIDを使って、Cloudflare、プロキシ、アプリの各ログを対応づけます。ログに到達していない場合は手前の層を調べます。

  • 同じ時刻とリクエストIDでログを検索する
  • HTTPステータスを返した層を特定する
  • CPU、メモリ、ディスクの状態を確認する

対処後のテスト

設定変更後は正常系だけでなく、停止中の上流や遅延時の応答も確認します。タイムアウト延長のみで隠さず、根本の接続・処理問題を記録します。

  • プロキシから上流へ直接接続を試す
  • 正常なリクエストが期待ステータスを返すか見る
  • 再発時に比較できる監視値を残す