본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Cloudflare 이해하기 (Understanding Cloudflare)

원문 보기 위키 갱신

많은 Fly.io 앱이 Cloudflare를 사용해요—가끔은 DNS만, 때로는 프록시를 활성화해, 때로는 둘 다를 위해요. 이 가이드에서는 지원되는 구성, 설정 방법, 그리고 Fly.io와 함께 Cloudflare를 사용할 때 주의할 점을 다뤄요.

많은 Fly.io 앱이 Cloudflare를 사용해요—때로는 DNS만, 때로는 프록시를 활성화해서, 때로는 둘 모두를 위해요. 이 가이드는 지원되는 구성, 설정 방법, 그리고 Fly.io와 함께 Cloudflare를 사용할 때 주의할 점을 다뤄요.

출처: 문서

본문

DNS 전용 설정

이것은 Fly.io와 함께 Cloudflare를 사용하는 가장 간단하고 신뢰할 수 있는 방법이에요. DNS 전용 설정을 구성하려면:

  1. IPv6 주소용 AAAA 레코드와 IPv4 주소용 A 레코드를 사용해 도메인을 Fly.io 앱으로 지정하세요.
  2. 또는 인증서 설정 지침에 표시된 앱의 고유 대상(target)을 가리키는 CNAME 레코드를 사용하세요.
  3. 이 레코드들에 대해 Cloudflare 프록시를 비활성화하세요("회색 구름" 선택).
  4. SSL 인증서는 Let's Encrypt를 사용해 Fly.io가 자동으로 처리해요.

CDN 프록시 설정 ("주황 구름")

Cloudflare의 프록시를 활성화하면 캐싱과 DDoS 보호를 얻을 수 있지만, SSL 인증서가 동작하는 방식도 바뀌어요. Cloudflare가 TLS 트래픽을 종료하므로, Fly.io는 기본 TLS-ALPN-01 인증서 발급 프로세스를 사용할 수 없어요. 원활한 설정의 핵심은 Fly.io에 도메인 소유권을 증명하고 인증서 검증이 Cloudflare 프록시를 통해 동작하게 해주는 _fly-ownership TXT 레코드예요.

**중요:** 와일드카드 인증서(예: `*.example.com`)는 Cloudflare 프록시를 통해 자동으로 발급될 수 없어요. Let's Encrypt가 와일드카드에 DNS-01 챌린지를 요구하고, Cloudflare의 Universal SSL이 그것을 방해할 수 있기 때문이에요. Cloudflare 프록시 뒤에서 와일드카드 인증서를 사용하려면 [Cloudflare Origin Certificate](#using-a-cloudflare-origin-certificate)를 가져오세요.

권장 설정

  1. 도메인을 Fly 앱에 추가하세요:
fly certs add example.com
  1. Cloudflare DNS에 _fly-ownership TXT 레코드를 추가하세요. fly certs setup을 실행해 필요한 레코드를 확인하세요:
fly certs setup example.com

출력에 표시된 TXT 레코드를 추가하세요. 이 레코드는 Fly.io에 도메인 소유권을 증명해요.

  1. Cloudflare에서 DNS 레코드를 구성하세요:

    • Fly 앱의 IPv4 주소를 가리키는 A 레코드를 추가하세요.
    • Fly 앱의 IPv6 주소를 가리키는 AAAA 레코드를 추가하세요.
    • 또는 앱의 .fly.dev 대상(target)을 가리키는 CNAME 레코드를 사용하세요.
    • 이 레코드들에 대해 Cloudflare 프록시(주황 구름)를 활성화하세요.
  2. Cloudflare의 SSL 모드를 **Full (strict)**로 설정하세요.

  3. 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를 가져올 수 있어요.

  1. Cloudflare 대시보드에서 Origin Certificate를 생성하세요:

    • SSL/TLS > Origin Server > Create Certificate로 이동하세요.
    • 커버할 호스트 이름을 선택하세요(예: example.com 및 *.example.com).
    • 유효 기간을 선택하세요(Cloudflare는 최대 15년을 제공해요).
    • 페이지를 열어 두세요—Cloudflare는 개인 키를 한 번만 보여줘요.
  2. 앱 대시보드의 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
  1. 인증서 설정 세부 정보에 표시된 _fly-ownership TXT 레코드를 아직 설정하지 않았다면 추가하세요.

  2. 위의 권장 설정에 설명된 대로 DNS 레코드와 Cloudflare SSL 모드를 구성하세요.

커스텀 인증서와 ACME 인증서는 같은 호스트 이름에 공존할 수 있어요. 커스텀 인증서가 기본으로 제공되고, 어떤 ACME 인증서든 자동 폴백으로 동작해요.

주의해야 할 일반적인 문제

일반적인 문제

  • 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

관련 주제

더 알아보기 (Learn more)