빠른 답변
프록시에서 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는 시간 내 응답 없음입니다.
주거용 프록시는 직접 요청에 없는 홉을 추가합니다: 트래픽이 게이트웨이 → 가정 연결 → 사이트로 갑니다. 각 홉이 지연을 더하며 가장 느린 홉이 전체 지연을 결정합니다.
Python, curl, Node.js, 브라우저에서 a 504는 어떻게 나타나나요?
같은 실패가 도구마다 다르게 출력됩니다. 로그에서 검색할 메시지들:
- 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 (CONNECT를 통한 HTTP, HTTPS) 및 포트 7778 (SOCKS5). 사용자 이름 형식: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. 관련: 502 Bad Gateway · 읽기 시간 초과 · 503 서비스 이용 불가.
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 오류
실패 사례를 다루는 문서가 있는 레지덴셜 프록시들
US$0.50/GB의 레지덴셜 프록시 CrawlRelay개, 트래픽이 절대 만료되지 않음.