Skip to content
Latchkey

502 Bad Gatewayとは何か? 壊れたupstreamの応答

502 Bad Gatewayとは、proxyまたはload balancerがupstreamサーバーへ到達しようとしたものの、無効な応答または応答なしを受け取ったときに返すHTTPエラーです。

502はあなたのアプリケーションから来るのではなく、その前にあるproxyが、backendが適切に応答しなかったと言って返すものです。デプロイはbackendを入れ替えるため、502はrollout中に数秒間よく現れます。これを知っておくと、実はタイミングの問題であるものをアプリケーションのバグとして追いかけずに済みます。

proxyレベルのエラー

reverse proxy、gateway、load balancerは、リクエストをupstreamへ転送し、壊れた、空の、またはパースできない応答を受け取ると502を返します。proxyは健全で、backendが問題です。

一般的な原因

  • backendがクラッシュしたか再起動中である。
  • 健全なbackendがまだ登録されていない。
  • upstreamが予期せずコネクションを閉じた。

デプロイが502をトリガーする理由

rollout中、古いインスタンスがドレインする一方で新しいものが起動します。短い期間、proxyは準備のできていないインスタンスへ転送することがあり、新しいバージョンが完全に処理し始めるまで一時的な502を生じます。

502対503対504

502はupstreamの不正な応答を、503は利用可能なbackendがないことを、504はupstreamがtimeoutしたことを意味します。この区別は、デプロイ中に正しい原因を指し示します。

CIチェックにおける502

トラフィックが移った瞬間に走るデプロイ後のsmoke checkは、一時的な502を捕まえることがあります。検証の前にhealth checkが通るのを待つと、この誤警報を避けられます。

一時的でretry可能

デプロイ期間中の502はほぼ常に一時的で、backendが健全になると解消します。Latchkeyのrunnerはデプロイの検証中に一般的なエンドポイントへの一時的な502をretryするため、rolloutの瞬間的なギャップがステップを失敗させることはありません。

重要なポイント

  • 502 Bad Gatewayは、proxyがupstreamのbackendから無効な応答を受け取ったことを意味します。
  • backendがドレインして起動するにつれ、デプロイ中に短く急増します。
  • デプロイ期間中の502は、持続的なものと違い一時的でretry可能です。

関連ガイド