Huny's Dev Blog
huny.dev

Cloudflare Tunnel 502 오류: Healthy인데 원본 서비스에 연결되지 않을 때

Cloudflare Tunnel 502에서 포트·프로토콜·컨테이너 네트워크와 원본 인증서를 점검하고 정상 연결을 확인한다.

Hun Jang
Hun Jang Nov 4, 2026

Cloudflare Tunnel이 Healthy인데 웹사이트에 502가 나온다면 먼저 cloudflared에서 원본 서비스까지의 연결을 확인한다. 특히 로그에 “Unable to reach the origin service”가 있다면 터널 자체가 Cloudflare에 연결된 상태에서 로컬 서비스에 도달하지 못한 경우다. 포트, 프로토콜, 네트워크 위치와 HTTPS 인증서를 차례로 점검한다. 모든 502가 이 원인인 것은 아니므로 오류 문구와 로그를 함께 봐야 한다.

클라우드 연결과 원본 서비스 연결을 표현한 생성형 개념 이미지다. 실제 제품 화면이나 네트워크 구조도는 아니다.

문서 확인: 2026-11-04. 아래 명령과 설정은 공식 문서 기반 설명용이며 실제 터널에서 실행하지 않았다. 예시 호스트와 포트는 자신의 환경에 맞게 바꾼다.

Healthy는 원본 서비스의 정상 확인이 아니다

Healthy는 cloudflared와 Cloudflare 사이의 연결 상태를 나타내며 라우트의 로컬 서비스까지 정상이라는 뜻은 아니다. 공식 문서가 설명하는 위 오류 문구가 있는 502는 cloudflared와 원본 사이를 살펴볼 신호다. 반면 1033은 터널 연결 또는 해당 라우팅을 따로 살펴봐야 한다. 원본 애플리케이션 자체가 502를 반환하는 경우도 있으므로 상태 코드만으로 원인을 확정하지 않는다. Tunnel 문제 해결

1. cloudflared가 실행되는 위치에서 접근한다

먼저 라우트의 Service URL을 기록하고, cloudflared와 같은 네트워크 환경에서 해당 주소를 시험한다. 다음은 원본이 HTTP의 8080 포트에서 수신할 때의 예시다.

응답이 없다면 프로세스가 실행 중인지, 해당 주소와 포트에서 수신하는지, 방화벽이나 네트워크 경로가 막혀 있는지 확인한다. HTTP 오류가 반환되더라도 TCP 연결 자체는 되었을 수 있으므로 상태와 응답 내용을 따로 살핀다. 로그의 connection refused는 프로세스 미실행이나 잘못된 포트에서 나타날 수 있다.

cloudflared가 컨테이너에서 실행 중이라면 localhost는 일반적으로 그 컨테이너 자신의 네트워크 공간이다. 다른 컨테이너의 localhost나 호스트의 localhost와 같다고 가정하지 않는다. 공유 네트워크의 서비스 이름과 포트 등 실제 접근 가능한 주소를 사용하고 cloudflared의 환경에서 검증한다. 서비스가 IPv4만 수신한다면 로그의 [::1]과 실제 바인딩 차이도 확인한다.

2. 프로토콜과 포트를 맞춘다

라우트의 Service URL은 방문자가 쓰는 공개 주소가 아니라 cloudflared가 실제로 접근할 원본 주소다. 원본이 HTTP로 수신한다면 http://, HTTPS로 수신한다면 https://와 실제 포트를 설정한다. 공개 호스트명이 터널을 다시 가리킨다면 이를 원본 주소로 사용하지 않는다. HTTPS 원본 문제 해결

HTTP 리스너를 HTTPS로 지정하거나 반대로 설정하면 연결은 열려도 프로토콜 오류가 날 수 있다. 원본이 HTTP 요청을 HTTPS로 리디렉션하는 경우에는 HTTPS 리스너 및 인증서를 확인하거나 원본 리디렉션 정책을 조정해야 한다. Cloudflare 존의 SSL/TLS 모드를 바꾼다고 Tunnel Service URL의 프로토콜이 자동으로 바뀌지는 않는다.

3. HTTPS 인증서의 이름과 신뢰를 확인한다

로그의 x509 오류가 이름 불일치인지 신뢰할 수 없는 인증기관인지 구분한다. 예를 들어 localhost에 연결하지만 인증서가 app.example.com용이라면, 로컬 관리 터널에서는 아래와 같이 인증서 이름을 지정할 수 있다.

이는 기존 설정을 대체하라는 뜻이 아니라 관련 ingress 규칙의 예시다. 사설 CA를 쓴다면 cloudflared가 해당 CA를 신뢰하도록 caPool을 설정한다. 인증서 검증을 끄는 대신 이름과 신뢰 체인을 먼저 바로잡는다. 로컬 관리 설정의 문법은 cloudflared tunnel ingress validate로 검사할 수 있다. 대시보드 관리 터널은 해당 라우트의 TLS 설정에서 같은 항목을 확인한다. 인증서 및 설정 예제

수정 후 양쪽을 다시 확인한다

cloudflared 로그에서 해당 오류가 사라졌는지 확인하고, cloudflared가 실행되는 환경에서 원본 URL을 다시 요청한다. 그다음 외부에서 공개 호스트명을 요청해 상태 코드와 리디렉션을 확인한다.

정상 응답은 해당 경로와 시점의 결과다. 다른 경로의 애플리케이션 오류나 이후 장애가 없다는 보장은 아니다. 로그와 요청 출력에는 호스트명, 쿠키, 인증 정보가 포함될 수 있으므로 공유하기 전에 제거한다.

English version: Cloudflare Tunnel 502: Fix Origin Connection Errors When the Tunnel Is HealthyCloudflare Tunnel 502: Fix Origin Connection Errors When the Tunnel Is Healthy

추천 글