Cloudflare 이해하기 (Understanding Cloudflare)
많은 Fly.io 앱이 Cloudflare를 사용해요—가끔은 DNS만, 때로는 프록시를 활성화해, 때로는 둘 다를 위해요. 이 가이드에서는 지원되는 구성, 설정 방법, 그리고 Fly.io와 함께 Cloudflare를 사용할 때 주의할 점을 다뤄요.
많은 Fly.io 앱이 Cloudflare를 사용해요—때로는 DNS만, 때로는 프록시를 활성화해서, 때로는 둘 모두를 위해요. 이 가이드는 지원되는 구성, 설정 방법, 그리고 Fly.io와 함께 Cloudflare를 사용할 때 주의할 점을 다뤄요.
출처: 문서
본문
DNS 전용 설정
이것은 Fly.io와 함께 Cloudflare를 사용하는 가장 간단하고 신뢰할 수 있는 방법이에요. DNS 전용 설정을 구성하려면:
- IPv6 주소용
AAAA레코드와 IPv4 주소용A레코드를 사용해 도메인을 Fly.io 앱으로 지정하세요. - 또는 인증서 설정 지침에 표시된 앱의 고유 대상(target)을 가리키는
CNAME레코드를 사용하세요. - 이 레코드들에 대해 Cloudflare 프록시를 비활성화하세요("회색 구름" 선택).
- SSL 인증서는 Let's Encrypt를 사용해 Fly.io가 자동으로 처리해요.
CDN 프록시 설정 ("주황 구름")
Cloudflare의 프록시를 활성화하면 캐싱과 DDoS 보호를 얻을 수 있지만, SSL 인증서가 동작하는 방식도 바뀌어요. Cloudflare가 TLS 트래픽을 종료하므로, Fly.io는 기본 TLS-ALPN-01 인증서 발급 프로세스를 사용할 수 없어요. 원활한 설정의 핵심은 Fly.io에 도메인 소유권을 증명하고 인증서 검증이 Cloudflare 프록시를 통해 동작하게 해주는 _fly-ownership TXT 레코드예요.
권장 설정
- 도메인을 Fly 앱에 추가하세요:
fly certs add example.com
- Cloudflare DNS에
_fly-ownershipTXT 레코드를 추가하세요.fly certs setup을 실행해 필요한 레코드를 확인하세요:
fly certs setup example.com
출력에 표시된 TXT 레코드를 추가하세요. 이 레코드는 Fly.io에 도메인 소유권을 증명해요.
-
Cloudflare에서 DNS 레코드를 구성하세요:
- Fly 앱의 IPv4 주소를 가리키는
A레코드를 추가하세요. - Fly 앱의 IPv6 주소를 가리키는
AAAA레코드를 추가하세요. - 또는 앱의
.fly.dev대상(target)을 가리키는CNAME레코드를 사용하세요. - 이 레코드들에 대해 Cloudflare 프록시(주황 구름)를 활성화하세요.
- Fly 앱의 IPv4 주소를 가리키는
-
Cloudflare의 SSL 모드를 **Full (strict)**로 설정하세요.
-
Cloudflare에서 Always Use HTTPS를 활성화하세요(권장).
Fly.io는 소유권 TXT 레코드가 있으면 Cloudflare 프록시를 통해 동작하는 HTTP-01 챌린지로 Let's Encrypt 인증서를 자동으로 발급해요. 검증 진행 상황을 모니터링하려면 fly certs check example.com을 실행하세요.
어떤 Cloudflare 구성은 HTTP-01 챌린지를 완전히 차단해요. 인증서 발급이 진행되지 않으면 대신 Cloudflare Origin Certificate를 가져오세요.
Cloudflare Origin Certificate 사용하기
자동 인증서 발급이 여러분의 설정에서 작동하지 않거나, 와일드카드 인증서(예: *.example.com)가 필요하다면, 대신 Cloudflare Origin Certificate를 가져올 수 있어요.
-
Cloudflare 대시보드에서 Origin Certificate를 생성하세요:
- SSL/TLS > Origin Server > Create Certificate로 이동하세요.
- 커버할 호스트 이름을 선택하세요(예:
example.com및*.example.com). - 유효 기간을 선택하세요(Cloudflare는 최대 15년을 제공해요).
- 페이지를 열어 두세요—Cloudflare는 개인 키를 한 번만 보여줘요.
-
앱 대시보드의 Certificates 아래에서 인증서를 Fly.io로 가져오세요. Cloudflare에서 인증서와 개인 키를 직접 붙여 넣을 수 있어요. 또는 파일로 저장하고 CLI를 사용하세요:
fly certs import example.com --fullchain cert.pem --private-key key.pem
fly certs import "*.example.com" --fullchain cert.pem --private-key key.pem
-
인증서 설정 세부 정보에 표시된
_fly-ownershipTXT 레코드를 아직 설정하지 않았다면 추가하세요. -
위의 권장 설정에 설명된 대로 DNS 레코드와 Cloudflare SSL 모드를 구성하세요.
주의해야 할 일반적인 문제
일반적인 문제
- Fly.io에 연결할 때는 항상 Cloudflare에서 "Full (strict)"를 사용하세요. "Flexible" 모드를 사용하면 리다이렉트 루프가 발생할 수 있어요.
- 서브도메인 또는 루트 도메인에 대한 인증서를 관리하는 애플리케이션은 하나만 있어야 해요. 둘 이상을 사용하면 충돌이 발생할 수 있어요.
ACME 특정 문제
이 문제들은 Cloudflare 프록시 뒤에서 Let's Encrypt(ACME) 인증서를 사용할 때 적용돼요. Cloudflare Origin Certificate를 사용한다면 적용되지 않아요.
- 다음과 같은 CAA 레코드로 도메인이 Let's Encrypt를 허용하는지 확인하세요:
example.com. CAA 0 issue "letsencrypt.org"
- Let's Encrypt에는 속도 제한(rate limit)이 있어요. 발급이 실패하면 Fly.io 대시보드의 인증서 상태 탭을 확인하세요.
- DNS-01 인증서는 Cloudflare Universal SSL과 충돌해요. 이는 Cloudflare의 Universal SSL이 DNS 대시보드에 표시되지 않는 숨은 ACME 챌린지 TXT 레코드를 자동으로 삽입할 때 발생해요. 이 유령 레코드들이 Let's Encrypt의 검증 프로세스를 방해해요. 이 상황에서 가장 좋은 선택은 Cloudflare Origin Certificate를 가져오는 거예요.
커스텀 인증서 문제
- 자동으로 갱신되는 Let's Encrypt 인증서와 달리, 커스텀 인증서는 만료 전에 수동으로 갱신하고 다시 가져와야 해요. Cloudflare Origin Certificate는 긴 유효 기간(최대 15년)으로 발급할 수 있지만, 여전히 만료를 추적해야 해요.
디버깅 도구
인증서나 DNS 문제를 진단할 때 이 도구들이 도움이 돼요:
fly certs check <hostname>: 소유권 TXT 상태, 커스텀 인증서 상태, ACME 인증서 상태를 한 곳에서 모두 확인하세요. 디버깅의 가장 좋은 출발점이에요.- crt.sh: 발급된 인증서 확인.
- DNSChecker: DNS 전파 확인.
- Let's Debug: Let's Encrypt 인증서 검증 문제 분석.
- dig: 커맨드라인에서 DNS 레코드 검사.
예를 들어:
fly certs check your-app.example.com
dig AAAA your-app.example.com
dig TXT _fly-ownership.your-app.example.com