# 代理中的 502 Bad Gateway：含义及解决方法

> 通过住宅代理出现 502 Bad Gateway 表示网关未从上游获得有效响应。原因、如何区分代理与目标、重试代码。

- URL: https://crawlrelay.com/zh/docs/errors/502-bad-gateway/
- 最后更新: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

HTTP 状态码（5xx，服务器错误）：每个工具中的精确错误信息、可能原因排序及有效解决方案。

**快速回答 — 代理中的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 或负载均衡器。任何一个都可能产生 502，且响应体通常会告诉你具体是哪一个。

住宅网络多出一环，出口是真实家庭连接，设备可能在请求中断开。此时网关无效数据返回。

## 在Python、curl、Node.js和浏览器中a 502是什么样？

每个工具中相同的失败会有不同的提示信息。请在日志中搜索以下信息：

- **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 默认重试，因 502 包含于 `RETRY_HTTP_CODES`

## 导致a 502的原因是什么？

最可能的首要原因：

- **请求期间出口退出连接池，** 住宅网络常见。
- **目标关闭连接、崩溃或返回格式错误数据。**
- **目标的 CDN 连接其源服务器失败。**
- **出口处目标 DNS 解析失败，** 如主机名拼写错误。
- **目标定位非常窄，** 导致少数出口失败频繁重现。

## 如何一步步诊断a 502？

1. 在新连接上重试请求。消失的单次 502 是出口中断所致。
2. 查看响应体和头：CDN 错误页面会指出 CDN 名称；简短代理消息会指示网关。
3. 用无代理的自身网络测试目标。
4. 扩大定位范围（城市到国家），对比失败率。

*用curl测试失败的URL（HTTP端口，详细模式）*

```bash
# 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:PASSWORD@gw.crawlrelay.com: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_URL
```

## 如何修复a 502？

- **用新会话 ID 重试**或不带会话 ID，请求改通过其他出口。
- **设定合理超时，** 使死连接迅速失败而非挂起。
- **记录各主机的 502，** 若率激增暂停访问，说明目标可能故障。

*Python：使用Retry-After、指数回退和抖动重试*

```python
import random
import time

import requests

PROXY = "http://USERNAME:PASSWORD@gw.crawlrelay.com: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 应该重试，但需更换出口并有限制。两到三次短暂退避重试足够。多出口反复 502 一般是目标故障，再多重试无益。按主机跟踪失败率，避免单一站点填满重试队列。

## 502 Bad Gateway如何应用于CrawlRelay？

使用 CrawlRelay 时，丢弃或生成新会话 ID，通常会使用不同住宅 IP 出口。粘性会话绑定特定出口，粘性会话中遇到 502 应结束该会话，代码中应实现。 [会话指南](https://crawlrelay.com/zh/docs/sessions/) 讲解如何干净地轮换会话。

网关：`gw.crawlrelay.com`，端口7777（通过CONNECT的HTTP、HTTPS）和端口7778（SOCKS5）。用户名格式：`USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}`。相关内容：[504 Gateway Timeout](https://crawlrelay.com/zh/docs/errors/504-gateway-timeout/) · [Connection reset](https://crawlrelay.com/zh/docs/errors/connection-reset/) · [503 Service Unavailable](https://crawlrelay.com/zh/docs/errors/503-service-unavailable/)。

## 502 Bad Gateway：开发者常问的问题

### 502是代理的问题还是网站的问题？

两者皆有可能。查看响应体：CDN错误页面会显示CDN名称，指向网站。如果每个尝试的网站都出现502，说明是代理或你的设置问题；如果仅某个网站出现502，则是该网站的问题。无代理测试同一URL以确保。

### 为什么502错误在住宅代理中更常见？

住宅出口是实际家庭连接，设备可能离线、更换网络或信号中断。请求进行中时发生这类情况，会返回502或重置。良好的爬虫应将此视为正常，并在新出口重试，且重试次数有限。

### 为了减少502错误，我应该切换到粘性会话吗？

不行。粘性会话将你固定在一个出口，如果该出口失败，该会话中所有请求也都会失败。独立页面使用轮换连接，多步骤流程才用粘性会话。遇到502后结束粘性会话并重新开始。

## 本参考中的其他代理错误

- [401 Unauthorized vs 407](https://crawlrelay.com/zh/docs/errors/401-unauthorized/)
- [403 Forbidden](https://crawlrelay.com/zh/docs/errors/403-forbidden/)
- [407 Proxy Authentication Required](https://crawlrelay.com/zh/docs/errors/407-proxy-authentication-required/)
- [429 Too Many Requests](https://crawlrelay.com/zh/docs/errors/429-too-many-requests/)
- [502 Bad Gateway](https://crawlrelay.com/zh/docs/errors/502-bad-gateway/)
- [503 Service Unavailable](https://crawlrelay.com/zh/docs/errors/503-service-unavailable/)
- [504 Gateway Timeout](https://crawlrelay.com/zh/docs/errors/504-gateway-timeout/)
- [Cannot connect to proxy (ProxyError)](https://crawlrelay.com/zh/docs/errors/cannot-connect-to-proxy/)
- [Connection reset by peer (ECONNRESET)](https://crawlrelay.com/zh/docs/errors/connection-reset/)
- [ERR_PROXY_CONNECTION_FAILED](https://crawlrelay.com/zh/docs/errors/err-proxy-connection-failed/)
- [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/zh/docs/errors/err-tunnel-connection-failed/)
- [Read timed out (ReadTimeout)](https://crawlrelay.com/zh/docs/errors/read-timeout/)
- [SOCKS5 proxy errors](https://crawlrelay.com/zh/docs/errors/socks5-proxy-errors/)
- [SSL: CERTIFICATE_VERIFY_FAILED](https://crawlrelay.com/zh/docs/errors/ssl-certificate-verify-failed/)
- [SSL: WRONG_VERSION_NUMBER](https://crawlrelay.com/zh/docs/errors/ssl-wrong-version-number/)

**带有涵盖失败案例文档的住宅代理** 来自US$0.50/GB的CrawlRelay住宅代理，流量永不过期。 [查看价格](https://crawlrelay.com/zh/pricing/) · [快速开始](https://crawlrelay.com/zh/docs/)

---

CrawlRelay: CrawlRelay 是为开发者设计的住宅代理和 4G/5G 移动代理轮换服务，适用于爬虫和 AI 数据管道：按需付费且流量永不过期，最低流量从 US$0.50/GB 起，支持加密货币支付，无需上传身份证明。无需 KYC —— 无需身份证、自拍和任何证件。支持加密货币支付。
