조회수: 95

524 A Timeout Occurred (Cloudflare) 해결

Cloudflare Error 524는 오리진이 연결됐지만 ~100초 안에 응답을 못 끝낸 것입니다. 느린 엔드포인트·막힌 워커·비동기 오프로드를 점검합니다. 무료 진단으로 확인.

내 도메인에 이 문제가 있는지 지금 확인

무료, 가입 불필요. 이 가이드가 다루는 항목을 바로 검사하고 조치 방법을 알려드립니다.

문제

Cloudflare가 Error 524: A timeout occurred을 반환합니다. 이건 연결 문제로 오해하기 쉽지만 정반대입니다. Cloudflare 엣지는 오리진에 멀쩡히 연결됐고, HTTP 요청을 보냈으며, 그다음 응답을 기다렸습니다. 오리진이 응답을 끝까지 보내기 전에 Cloudflare의 타임아웃 — 기본 요금제에서 약 100초 — 이 지나버린 것입니다. 그래서 엣지가 포기하고 524 페이지를 띄웁니다. TCP 핸드셰이크는 됐습니다. 요청도 전달됐습니다. 서버가 그저 답을 만드는 데 너무 오래 걸렸을 뿐입니다. 조사의 초점은 DNS나 방화벽, 라우팅이 아니라 오리진의 응답 시간을 정면으로 겨눕니다.

증상

  • Cloudflare 브랜드 오류 페이지가 Error 524: A timeout occurred을 표시합니다.
  • 즉시가 아니라 오래(대략 100초) 기다린 뒤에 뜹니다(즉시 뜨는 Cloudflare 오류는 보통 연결 실패인 521·522입니다).
  • 특정 엔드포인트에서 자주 터집니다: 무거운 리포트, 대량 내보내기, 느린 검색, 인라인으로 너무 많은 일을 하는 웹훅. 정적 페이지와 가벼운 경로는 잘 열립니다.
  • 상시가 아니라, 부하나 요청 크기에 따라 간헐적일 수 있습니다.

주요 원인 3가지

  1. 진짜로 느린 엔드포인트 - 요청이 약 100초를 넘기는 작업을 시작합니다: 인덱스 없는 DB 쿼리, 즉석 PDF/CSV 내보내기, 느린 서드파티 API 동기 호출, 인라인으로 처리하는 이미지·영상 가공. 오리진은 결국 응답합니다 — Cloudflare가 기다림을 멈추기 전에 못 할 뿐입니다.
  2. 막히거나 굶주린 오리진 - 애플리케이션이 데드락에 걸렸거나, 루프를 돌거나, 여유가 없습니다. 워커 프로세스 고갈(PHP-FPM pm.max_children, 가득 찬 스레드 풀), 포화된 CPU, 메모리 압박, 전부 대여된 DB 커넥션 풀 — 이 모든 것이 평소 빠른 요청조차 제때 응답을 못 만들게 합니다.
  3. 일반 요청이 아닌 장수(長壽) 연결 - 엣지 타임아웃을 넘겨 열려 있는 WebSocket류·롱폴링 연결, 또는 Cloudflare가 재사용하려던 유휴 연결을 오리진이 닫아버리는 keep-alive 불일치. 단일 “요청”이 느리지 않은데도 524로 드러납니다.

DechoNet으로 진단

  • HTTP 진단을 실패하는 URL에 돌려, 오리진이 실제로 얼마나 걸리는지·끝까지 응답하는지 측정하세요. 100초 근처나 그 너머로 응답이 찔끔찔끔 들어온다면 그게 결정적 단서입니다.
  • 포트 진단을 오리진의 80/443에 돌리면 연결 계층이 건강한지 확인됩니다 — 524라면 건강해야 정상입니다. 깨끗한 포트 결과는 521·522 연결 실패를 배제하고 초점을 응답 시간에 묶어줍니다.

해결 체크리스트

  • Cloudflare를 우회해 오리진에 직접 재현하고 시간을 재세요: curl -o /dev/null -s -w 'total: %{time_total}s\n' --resolve YOUR_DOMAIN:443:ORIGIN_IP https://YOUR_DOMAIN/slow-path. 약 100초 이상 걸린다면 병목이 Cloudflare가 아니라 오리진임이 확인됩니다.
  • 느린 작업을 찾으세요. 슬로우 쿼리 로그(Postgres의 log_min_duration_statement, MySQL의 slow query log), 애플리케이션 자체 요청 타이밍, 문제 경로의 APM 트레이스를 확인하세요. 524가 뜨는 엔드포인트는 거의 항상 비싼 일 하나를 동기로 하고 있습니다.
  • 속도만이 아니라 구조를 고치세요: 장시간 작업(내보내기, 리포트, 서드파티 호출, 미디어 가공)을 백그라운드 잡으로 옮기고 상태/폴링 엔드포인트로 즉시 응답하세요. 이것이 지속 가능한 해결책입니다 — 130초 쿼리를 95초로 줄이는 건 벼랑을 옮길 뿐입니다.
  • 정말로 오래 걸려야 하고 지금 리팩터링이 안 되는 작업은 그 엔드포인트를 DNS 전용(회색 구름) 서브도메인으로 라우팅해 Cloudflare 프록시와 100초 상한을 건너뛰게 하세요. Cloudflare가 지원하는 탈출구로 문서화돼 있습니다.
  • 부하 시 오리진 용량을 점검하세요: 워커/스레드 한도, DB 커넥션 풀 크기, CPU·메모리 여유. 피크에만 뜨는 524는 보통 단일 느린 쿼리가 아니라 자원 고갈입니다.
  • 수정 후 HTTP 진단을 다시 돌려 엔드포인트가 이제 타임아웃 한참 안쪽에서 끝나는지 두 번 이상 확인하세요.

에스컬레이션 시점

  • Enterprise 요금제에서는 엣지 타임아웃을 조정할 수 있습니다 — Cache Rule로 프록시 읽기 타임아웃을 최대 6,000초까지 올릴 수 있습니다. 이건 압력 밸브지 해결책이 아닙니다: 30분 HTTP 타임아웃이 필요한 경로는 백그라운드 잡이어야 할 경로입니다.
  • 오리진이 자체 nginx/HAProxy 뒤에 있다면 어느 계층이 먼저 타임아웃되는지 확인하세요. 실제 작업보다 짧은 상위 proxy_read_timeout·fastcgi_read_timeout은 Cloudflare의 524 이전에 504를 냅니다 — 가장 안쪽 타임아웃을 쫓으세요.
  • Cloudflare Tunnel(cloudflared)을 쓴다면, 100초 프록시 상한과 별개로 자체 연결·유휴 타임아웃이 있습니다. 터널을 통한 524는 앱만이 아니라 터널 설정을 가리킵니다.

관련 도구

관련 가이드

가이드 공유

[Ad] Guide Detail Inline
← 전체 가이드 보기