クイックアンサー
プロキシでの502 Bad Gatewayとは何を意味していますか?
502 Bad Gateway とは、ゲートウェイやプロキシが次のサーバーから無効な応答または応答なしを受信したことを意味します。CrawlRelayの居住者用プロキシ経由なら502は、出口の接続断や対象側の失敗を示すことが多いです。新しい接続で一度リトライしてください。特定サイトだけで502が続くならサイト側が問題で、全サイトで起こるなら設定を確認してください。
502 Bad Gatewayを一目で理解する
| エラー | 502 Bad Gateway |
|---|---|
| タイプ | HTTPステータスコード(5xx、サーバーエラー) |
| 送信元 | 対象のプロキシゲートウェイまたはリバースプロキシ |
| 定義されている場所 | RFC 9110, section 15.6.3 |
| 再試行しますか? | はい、新しい接続またはセッションでリトライ可能です |
| まず確認すること | 新しいIPで一度リトライし、続くようならプロキシなしで対象をテストしてください |
502 Bad Gatewayとは何ですか?
RFC 9110では502は後方のサーバーが不正応答を返したことを示すと記述されています。スクレイピング構成では、少なくともプロキシとCDNやロードバランサーの2つのゲートウェイがあり、どちらからの応答か本文でわかることが多いです。
居住者用ネットワークはさらにリンクが1つ増えます。出口は実際の家庭回線であり、リクエスト途中で離脱することがあります。その場合ゲートウェイは有効な応答を返せません。
a 502はPython、curl、Node.js、ブラウザではどのように表示されますか?
同じ失敗でもツールごとに異なる表示になります。ログ検索用のメッセージは以下の通りです:
- Python requests:
status_code == 502、HTTPSならProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 502 Bad Gateway')) - curl:
curl: (56) CONNECT tunnel failed, response 502 - ブラウザ: HTTPSは
net::ERR_TUNNEL_CONNECTION_FAILED、HTTPはエラーページ - Scrapy: デフォルトでリトライ、502は
RETRY_HTTP_CODESに含まれる
a 502の原因は何ですか?
最も可能性が高いのは次の通りです:
- リクエスト中に出口がプールから外れた。 居住者用ネットワークではよくあることです。
- **対象が接続を切断、クラッシュ、または不正応答を返した。
- **対象のCDNがオリジンサーバーに接続できなかった。
- **出口側で対象のDNS障害。例えばホスト名のタイプミス。
- **非常に狭いターゲティングで出口が少なく、同じ出口で繰り返し障害が起きる。
a 502を段階的に診断するには?
- 新しい接続で再リクエスト。一度だけで消えれば出口の離脱。
- 応答本文とヘッダーを確認。CDNエラーページならCDN名、簡素なプロキシメッセージならゲートウェイ名がわかる。
- プロキシなしで自分の接続から対象をテスト。
- ターゲット範囲を市単位から国単位まで広げて障害率を比較。
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLa 502をどう修正しますか?
- **新しいセッションIDでリトライ、またはセッションなしで別出口経由にする。
- **タイムアウトを適切に設定し、切れた出口で長時間待たないように。
- **ホストごとに502を記録し、発生率が上がったホストは一時停止。故障中の恐れあり。
import random
import time
import requests
PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
RETRY_STATUSES = {429, 502, 503, 504}
def fetch(url, attempts=5, timeout=(10, 30)):
for attempt in range(attempts):
try:
r = requests.get(url, proxies=PROXIES, timeout=timeout)
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
r = None # dropped exit, reset or timeout: a new connection gets a new exit
if r is not None and r.status_code not in RETRY_STATUSES:
return r
retry_after = r.headers.get("Retry-After", "") if r is not None else ""
if retry_after.isdigit():
wait = int(retry_after)
else:
wait = min(60, 2 ** attempt) + random.uniform(0, 1)
time.sleep(wait)
raise RuntimeError("giving up on %s after %d attempts" % (url, attempts))a 502の後に再試行すべきですか?
はい、502はリトライ可能ですが、新しい出口かつ回数制限を設けてください。2~3回の短いバックオフ付きリトライで十分です。複数出口で続く502は対象側問題で、追加リトライは効果がありません。ホストごとの発生率監視で、1サイトの故障がリトライキューを埋め尽くさないようにしてください。
502 Bad GatewayはCrawlRelayにどう関係しますか?
CrawlRelayではセッションIDを切るか新たに作って、通常は別の居住者用IPから通信します。スティッキーセッションは1出口に固定されるため、スティッキー内の502はセッション終了と扱うべきです。セッションガイドでクリーンなセッション切替方法を解説しています。
ゲートウェイ:gw.crawlrelay.com、ポート7777(HTTP、HTTPSはCONNECT経由)、ポート7778(SOCKS5)。ユーザー名形式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。関連情報:504 Gateway Timeout · Connection reset · 503 Service Unavailable。
502 Bad Gateway:開発者がよく尋ねる質問
502エラーはプロキシの問題ですか、それともウェブサイトの問題ですか?
どちらの可能性もあります。レスポンスボディを確認してください。CDNのエラーページにはCDN名が記載されており、それはウェブサイトを示します。試したすべてのサイトで502が出る場合はプロキシか設定に問題があり、特定のサイトだけで502になる場合はそのサイト側に問題があります。プロキシを使わず同じURLをテストして確認してください。
なぜ502エラーは住宅用プロキシでより頻繁に発生するのでしょうか?
住宅用出口は実際の家庭回線であり、デバイスがオフラインになったりネットワークが切り替わったり信号を失うことがあります。その際にリクエストが途中であると502かリセットで終了します。優れたスクレイパーはこれを通常のこととして扱い、新しい出口で再試行し、上限を設けています。
502エラーを減らすためにスティッキーセッションに切り替えるべきですか?
いいえ。スティッキーセッションは同じ出口を使い続けるため、その出口が失敗するとセッション中のすべてのリクエストが失敗します。独立したページには回転接続を使い、多段階のフローでのみスティッキーセッションを使ってください。502発生後はスティッキーセッションを終了し新しいものを開始します。
他のプロキシエラーのリファレンス
HTTPステータスコード
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
ブラウザとクライアントのエラー
接続とTLSエラー
失敗ケースを網羅したドキュメント付きレジデンシャルプロキシ
$0.50/GB発のCrawlRelayレジデンシャルプロキシ、期限切れがないトラフィック。