HTTPQUERY
日本語

502 Bad Gateway

使い方

502 Bad Gateway ステータスコードは、サーバーが上流サーバーのプロキシまたはゲートウェイとして動作していることを意味します。HTTP リクエストを転送したあと、上流サーバーが無効なレスポンスを返しました。この問題が解決するまでの時間は予測できません。

オリジンサーバーが HTTP のエラーステータスコードを返す場合、問題を最も正確に説明するため、同じステータスコードと関連情報がクライアントへ転送されることが期待されます。

プロキシが上流サーバーからまったく応答を受け取らない場合は、504 Gateway Timeout ステータスコードのほうが適切です。

注意

502 Bad Gateway は、プロキシがバックエンドから無効なレスポンスを受け取ったことを意味します。バックエンドは応答したものの、そのレスポンスが不正な形式か想定外でした。504 Gateway Timeout は、タイムアウト期間内にバックエンドがまったく応答しなかったことを意味します。502 はバックエンドのクラッシュやプロトコルエラーを示し、504 は遅いか到達できないバックエンドを示します。どちらのコードも、クライアントに落ち度があることを示すものではありません。

SEO への影響

Googlebot は 5xx エラーを、サイト全体のクロール頻度を一時的に低下させるシグナルとして扱います。以前にインデックスされていた URL は当初は保持されますが、ダウンタイムが長引くと Google はそれらをインデックスから削除します。502 レスポンスとともに返されたコンテンツは無視されます。この点において、Google は 500、502、503 を同じように扱います。robots.txt ファイルでの 5xx エラーははるかに深刻で、サイトの他のすべてのページが 200 を返していても同様です。Google は最大 12 時間クロールを停止し、その後最大 30 日間はキャッシュされたコピーにフォールバックします。エラーが続くと、Google はサイトを完全にインデックスから除外します。Bingbot も 5xx レスポンスをクロールの失敗として扱います。5xx エラーが継続すると、Bing でのインデックス登録が妨げられます。

例

クライアントがリソースを要求し、上流サーバーが無効なレスポンスを返したため、サーバーは 502 Bad Gateway ステータスコードで応答します。

リクエスト

GET /news HTTP/1.1
Host: example.com

レスポンス

HTTP/1.1 502 Bad Gateway
Content-Type: text/html; charset=UTF-8
Content-Length: 134

<html>
  <head>
    <title>Bad Gateway</title>
  </head>
  <body>
    <p>The server is unreachable at this time.</p>
  </body>
</html>

対処方法

まず /var/log/nginx/error.log または相当するプロキシのエラーログを確認します。ログメッセージは、上流の障害の態様(接続拒否、接続の早期切断、無効なヘッダー)を特定します。

一般的な根本原因とその対処:

Apache のリバースプロキシ構成では、ProxyPass/ProxyPassReverse のディレクティブを確認し、mod_proxy と mod_proxy_http が有効であることを確認します。再起動の前に apachectl configtest を実行します。

修正を適用したら、nginx -t で設定を検証し、その後リロードします。

コードリファレンス

.NET

HttpStatusCode.BadGateway

Rust

http::StatusCode::BAD_GATEWAY

Rails

:bad_gateway

Go

http.StatusBadGateway

Symfony

Response::HTTP_BAD_GATEWAY

Python3.5+

http.HTTPStatus.BAD_GATEWAY

Java

java.net.HttpURLConnection.HTTP_BAD_GATEWAY

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_BAD_GATEWAY

Angular

@angular/common/http/HttpStatusCode.BadGateway