# Kết nối bị reset bởi peer (ECONNRESET) qua proxy

> Kết nối bị reset bởi peer (ECONNRESET, socket hang up) qua proxy: kết nối keep-alive lỗi thời, exit bị rớt, tường lửa. Nguyên nhân và cách khắc phục.

- URL: https://crawlrelay.com/vi/docs/errors/connection-reset/
- Cập nhật lần cuối: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Lỗi socket: thông báo chính xác trong từng công cụ, nguyên nhân có thể theo thứ tự, và cách sửa hiệu quả.

**Trả lời nhanh — Connection reset by peer (ECONNRESET) nghĩa là gì với proxy?**

**Kết nối bị reset bởi peer** có nghĩa là phía bên kia đóng kết nối TCP đột ngột bằng một reset thay vì đóng bình thường. Qua proxy residential của CrawlRelay, nguyên nhân phổ biến là kết nối keep-alive tái sử dụng đã lỗi thời, một exit bị rớt, hoặc tường lửa đích cắt kết nối. Thử lại các yêu cầu an toàn trên kết nối mới và không giữ các kết nối nhàn rỗi quá lâu.

## Connection reset by peer (ECONNRESET) nhìn nhanh

| Thuộc tính | Giá trị |
| --- | --- |
| Lỗi | Connection reset by peer (ECONNRESET) |
| Loại | Lỗi socket |
| Gửi bởi | Chuỗi mạng, sau khi phía bên kia đóng kết nối đột ngột |
| Định nghĩa tại | TCP reset (RST segment): RFC 9293 |
| Thử lại? | Có, với các yêu cầu an toàn, trên một kết nối mới |
| Kiểm tra trước tiên | Xem xem có xảy ra reset trên các kết nối tái sử dụng đang nhàn rỗi hay trên kết nối mới |

## Connection reset by peer (ECONNRESET) nghĩa là gì?

TCP có thể kết thúc kết nối một cách khéo léo hoặc bằng reset. Một reset báo cho máy của bạn biết phía bên kia đã hủy kết nối, do đó mọi dữ liệu đang chuyền bị mất. Python sẽ ném `ConnectionResetError`; Node.js sẽ ném `ECONNRESET` hoặc 'socket hang up'.

“Peer” là bên mà socket của bạn kết nối trực tiếp, thường là cổng proxy. Reset có thể do các bên xa hơn trên chuỗi kết nối và được truyền tiếp.

## a connection reset trông như thế nào trong Python, curl, Node.js và trình duyệt?

Cùng một lỗi nhưng hiển thị khác nhau trên mỗi công cụ. Đây là các thông báo bạn nên tìm trong nhật ký của mình:

- **Python:** `ConnectionResetError: [Errno 104] Connection reset by peer`, hoặc `[WinError 10054]` trên Windows
- **requests:** `ConnectionError(ProtocolError('Connection aborted.', ConnectionResetError(...)))`
- **Node.js:** `Error: socket hang up` hoặc `read ECONNRESET`
- **curl:** `curl: (56) Recv failure: Connection reset by peer`

## Nguyên nhân gây ra a connection reset là gì?

Khả năng đầu tiên là:

- **Kết nối keep-alive lỗi thời.** Một kết nối trong pool để nhàn rỗi và bị đóng bên kia; yêu cầu kế tiếp trên nó thất bại ngay lập tức.
- **Exit bị rớt**, khiến mọi kết nối sử dụng exit này bị cắt.
- **Tường lửa đích**, reset các kết nối mà nó không thích.
- **Tải lên hoặc tải xuống lâu** bị cắt bởi giới hạn nhàn rỗi trên đường truyền.

## Làm sao để chẩn đoán a connection reset từng bước?

1. Kiểm tra xem reset xảy ra tại yêu cầu đầu tiên của kết nối hay sau khi tái sử dụng nhàn rỗi.
2. Đếm số lần reset mỗi host: một host chỉ đến đích; nhiều host là do đường truyền hoặc pool.
3. Ghi nhận thời gian: reset sau đúng N giây nhàn rỗi chỉ ra giới hạn nhàn rỗi.

*Kiểm tra URL bị lỗi với curl (cổng HTTP, chi tiết)*

```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
```

## Làm sao để sửa a connection reset?

- **Thử lại các yêu cầu không thay đổi trạng thái** (GET, HEAD) một lần trên kết nối mới.
- **Rút ngắn thời gian tái sử dụng nhàn rỗi:** đóng các kết nối trong pool để nhàn rỗi quá vài giây, hoặc mở kết nối mới cho mỗi yêu cầu khi bạn cần IP mới.
- **Kết thúc phiên 'sticky'** reset liên tục và bắt đầu phiên mới.
- **Giảm tốc độ** trên các host reset khi tải cao.

*Python: thử lại với Retry-After, độ trễ lũy thừa và jitter*

```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))
```

## Có nên thử lại sau a connection reset không?

Thử lại reset một lần với các yêu cầu an toàn như GET. Không thử lại mù quáng các yêu cầu POST thay đổi dữ liệu: lần đầu có thể đã xử lý. Một loạt reset trên một host nghĩa là host đó đang chặn bạn; giảm tốc độ tại đó.

## Connection reset by peer (ECONNRESET) áp dụng thế nào với CrawlRelay?

Trên CrawlRelay, xoay IP thực hiện khi mở kết nối mới. Khách giữ kết nối luôn mở giữ exit cũ cho mọi yêu cầu, nên exit bị rớt sẽ reset kết nối đó. Mở lại kết nối để lấy exit mới; [hướng dẫn về phiên](https://crawlrelay.com/vi/docs/sessions/) trình bày mẫu này.

Gateway: `gw.crawlrelay.com`, cổng 7777 (HTTP, HTTPS qua CONNECT) và cổng 7778 (SOCKS5). Định dạng tên người dùng: `USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}`. Tham khảo liên quan: [502 Bad Gateway](https://crawlrelay.com/vi/docs/errors/502-bad-gateway/) · [Read timed out](https://crawlrelay.com/vi/docs/errors/read-timeout/) · [Sessions guide](https://crawlrelay.com/vi/docs/sessions/).

## Connection reset by peer (ECONNRESET): các câu hỏi thường gặp của lập trình viên

### Tại sao tôi gặp 'socket hang up' trong Node.js khi dùng proxy?

Kết nối đóng trước khi nhận được phản hồi. Với proxy, nguyên nhân phổ biến là socket keep-alive tái sử dụng bị lỗi thời, exit bị rớt hoặc đích cắt kết nối. Thử lại các yêu cầu GET trên socket mới và giới hạn thời gian giữ socket nhàn rỗi trong pool.

### Reset kết nối có phải dấu hiệu tôi bị chặn không?

Đôi khi. Tường lửa có thể reset các kết nối từ client mà nó từ chối, nhưng reset cũng xảy ra vì lý do không độc hại trên mọi mạng residential. Xem mẫu: reset giới hạn trên một host và tăng tỉ lệ theo tải yêu cầu cho thấy host đang chống lại bạn.

### Tôi có nên tắt keep-alive khi scrape không?

Không hoàn toàn. Keep-alive tiết kiệm thời gian khi bạn gửi nhiều yêu cầu đến cùng một host qua một exit sticky. Khi bạn muốn IP khác mỗi yêu cầu, kết nối mới cho mỗi yêu cầu là lựa chọn sạch hơn. Kết hợp cả hai không cẩn thận sẽ gây ra reset do lỗi kết nối lỗi thời.

## Các lỗi proxy khác trong tài liệu tham khảo này

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

**Proxy dân cư với tài liệu bao gồm các trường hợp lỗi** CrawlRelay proxy dân cư từ 0,50 US$/GB, lưu lượng không bao giờ hết hạn. [Xem giá](https://crawlrelay.com/vi/pricing/) · [Bắt đầu nhanh](https://crawlrelay.com/vi/docs/)

---

CrawlRelay: CrawlRelay là dịch vụ proxy dân cư xoay vòng và proxy di động 4G/5G dành cho nhà phát triển, hỗ trợ scrapers và pipeline dữ liệu AI: traffic trả tiền theo nhu cầu không hết hạn từ 0,50 US$/GB, thanh toán bằng crypto, không cần tải lên ID. Không cần KYC — không cần ID, không chụp selfie, không giấy tờ.
