クイックアンサー
プロキシでの504 Gateway Timeoutとは何を意味していますか?
504 Gateway TimeoutはプロキシやサイトのCDNのようなゲートウェイが次のサーバーからの応答を待ちすぎて諦めたことを意味します。CrawlRelayの住宅用プロキシ経由では、遅いリンクは通常ターゲットまたは出口の家庭回線です。新しい出口で1回再試行し、ページを軽く保ち、クライアント側でタイムアウトを設定して遅延リクエストを自分の制御下で失敗させることを推奨します。
504 Gateway Timeoutを一目で理解する
| エラー | 504 Gateway Timeout |
|---|---|
| タイプ | HTTPステータスコード(5xx、サーバーエラー) |
| 送信元 | プロキシゲートウェイかターゲット前のCDN |
| 定義されている場所 | RFC 9110, section 15.6.5 |
| 再試行しますか? | はい、新しい出口で1〜2回可能 |
| まず確認すること | プロキシなしで同じリクエストの時間を計測 |
504 Gateway Timeoutとは何ですか?
RFC 9110は504を、上流サーバーからのタイムリーな応答が得られなかったゲートウェイと定義しています。502は誤答、504は時間内に応答なしの双子のような関係です。
住宅用プロキシは直接リクエストには存在しない中継を1つ加えます:トラフィックはゲートウェイ、家庭回線、サイトの3段階を経て遅延が1段階でも最も遅いものが全体を決めます。
a 504はPython、curl、Node.js、ブラウザではどのように表示されますか?
同じ失敗でもツールごとに異なる表示になります。ログ検索用のメッセージは以下の通りです:
- Python requests:
status_code == 504、HTTPSターゲットの場合はTunnel connection failed: 504 Gateway Timeout - curl:
curl: (56) CONNECT tunnel failed, response 504 - Scrapy: デフォルトで再試行(504は
RETRY_HTTP_CODESに含む) - CDNが提供するサイト: ステータス504のCDNエラーページ
a 504の原因は何ですか?
最も可能性が高いのは次の通りです:
- 遅いターゲット(例:構築に数秒かかる検索ページ)
- 遅い出口(弱い家庭回線や混雑しているモバイル回線)
- ゲートウェイの忍耐を超える大きなレスポンス
- CDNの背後のサイトオリジンのタイムアウト それによりCDNが504を返す場合
a 504を段階的に診断するには?
- プロキシなしでリクエスト時間を計測。自宅でも遅いならターゲットが遅い。
- 新しい出口で再試行し時間を比較。
- レスポンスサイズの確認:5MBのページは50KBのページとは異なる問題。
- ボディを読み、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 504をどう修正しますか?
- 明示的なタイムアウト設定: 通常ページは接続10秒程度、読み取り30秒から60秒。
- 新しい出口で1〜2回再試行。
- リクエスト量を減らす: HTMLやJSON APIのみが必要な場合は画像やメディアを省略。
- 重いページはターゲット国の深夜帯などのオフピークに予約。
import httpx
proxy = "http://USERNAME:[email protected]:7777"
timeout = httpx.Timeout(connect=10.0, read=30.0, write=10.0, pool=10.0)
with httpx.Client(proxy=proxy, timeout=timeout) as client:
try:
r = client.get("https://api.ipify.org")
print(r.status_code, r.text)
except httpx.TimeoutException as exc:
print("timed out:", type(exc).__name__) # ConnectTimeout, ReadTimeout...a 504の後に再試行すべきですか?
新しい出口で504エラーが発生した場合は、一度か二度リトライを行い、短いバックオフをかけてください。同じURLが複数の出口でタイムアウトする場合、その対象は遅いか過負荷状態にあります。そのホストへのアクセス頻度を下げるか、後で再試行してください。クライアント側のタイムアウトを上げるのは、ゲートウェイのタイムアウトが制限でない場合にのみ効果があります。
504 Gateway TimeoutはCrawlRelayにどう関係しますか?
セッションIDなしでCrawlRelayに新規接続すると通常異なる住宅用出口が割り当てられるため、リトライは別のホーム接続を試すことになります。遅い対象にはペイロードを小さく保ち、ファーストバイトまでの時間と合計ダウンロード時間を別々に測定してください。
ゲートウェイ:gw.crawlrelay.com、ポート7777(HTTP、HTTPSはCONNECT経由)、ポート7778(SOCKS5)。ユーザー名形式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。関連情報:502 Bad Gateway · Read timed out · 503 Service Unavailable。
504 Gateway Timeout:開発者がよく尋ねる質問
502と504の違いは何ですか?
どちらもゲートウェイから送られます。502は背後のサーバーが無効な応答を返したか接続を切ったことを意味します。504は期限内に何も送られなかったことを意味します。住宅用プロキシの場合、502は出口が切断されたことを示し、504は対象またはホーム接続が遅いことを示すことが多いです。
プロキシのタイムアウトは上げられますか?
お客様が制御できるのはクライアントのタイムアウトであり、ゲートウェイの内部タイムアウトではありません。接続および読み取りのタイムアウトを明示的に設定し、遅い要求は予測可能に失敗させ、新しい出口でリトライし、ページを軽量化してください。対象が非常に長い応答を必要とする場合は、そのAPIや軽量なページを取得してください。
モバイルプロキシは住宅用より遅いですか?
モバイル出口は他のユーザーとセルを共有し、信号や負荷に応じて速度が変わるため、遅いことがあります。モバイルIPは必要な対象用に、住宅用IPは大量クロール用に使い分けてください。出口の種類ごとに応答時間を測定してから判断してください。
他のプロキシエラーのリファレンス
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レジデンシャルプロキシ、期限切れがないトラフィック。