DNS 및 Cloudflare
NexCMP에는 하나의 DNS 이름(즉, 메인 도메인)이 필요하며 두 가지 모드로 작동합니다.
모드 A: DNS가 서버를 직접 가리키는 경우
cloud.example.com → <server public IPv4>A 레코드를 생성합니다 (서버에 IPv6가 있는 경우 AAAA 레코드도 생성).- 사용하는 경우 선택 사항: 동일한 IP를 가리키는
admin.cloud.example.com및partner.cloud.example.com. - installer를 실행(또는 재실행)합니다. 이름이 서버 자신의 공인 IP로 확인되는 것을 감지하고 포트 80의 HTTP-01 챌린지를 통해 Let's Encrypt 인증서를 발급받습니다.
모드 B: 도메인이 Cloudflare를 통해 프록시되는 경우
주황색 클라우드(Proxied)를 사용하여 동일한 레코드를 생성합니다. 설치 프로그램은 이름이 Cloudflare 주소로만 확인되는 것을 감지하고 Cloudflare 모드로 전환됩니다:
- nginx는 여전히 서버의 80/443 포트에서 수신 대기합니다;
- 방문자의 실제 IP는
CF-Connecting-IP헤더에서 읽어오며, Cloudflare의 공개 IP 대역에서 들어오는 연결에 대해서만 적용되므로 다른 사용자가 위조할 수 없습니다. - 인증서는 Let's Encrypt를 통해 발급받으며(Cloudflare가 챌린지를 오리진으로 전달), 아직 발급이 불가능한 경우 "Full" 모드가 작동하도록 자체 서명 오리진 인증서를 생성하고 추후 설치 프로그램을 재실행하여 Let's Encrypt로 업그레이드합니다.
--behind-cloudflare(으)로 이 모드를 강제 적용할 수 있습니다.
::: important Cloudflare에서 SSL/TLS 모드 설정 Cloudflare에서 SSL/TLS › Overview(으)로 이동하여, 설치 프로그램에 Let's Encrypt 인증서가 확인되면 **Full (strict)**을 선택하십시오. 자체 서명 오리진 인증서의 경우 Full을 사용하십시오. Flexible은 리디렉션 루프를 유발합니다. :::
TIP
"Always Use HTTPS"가 켜져 있으면 Cloudflare는 검증 요청을 오리진의 443 포트로 보냅니다. 설치 프로그램은 먼저 임시 자체 서명 인증서를 생성한 다음 Let's Encrypt를 재시도하여 이를 처리합니다.
확인
bash
dig +short cloud.example.com # A record (a Cloudflare address in mode B)
curl -I https://cloud.example.com/healthz
sudo certbot certificates # certificate name, domains and expiry인증서는 certbot 타이머를 통해 자동으로 갱신됩니다. 갱신 시 웹루트 /var/www/nexcmp-acme을(를) 사용하므로 80 포트에 (직접 또는 Cloudflare를 통해) 계속 접근할 수 있어야 합니다.
자주 발생하는 문제
| 증상 | 원인 | 해결 방법 |
|---|---|---|
| 설치 프로그램에 "DNS … does not point to … (nor to Cloudflare) — skipping nginx/TLS" 메시지가 표시됨 | DNS 레코드가 누락되었거나 잘못되었거나 전파되지 않음 | 레코드를 수정하고 전파될 때까지 기다린 후 설치 프로그램을 다시 실행합니다. |
Cloudflare 프록시 환경에서 브라우저에 ERR_TOO_MANY_REDIRECTS이(가) 표시됨 | SSL 모드가 Flexible으로 설정됨 | Full (strict)(또는 Full)(으)로 설정합니다. |
| Cloudflare 오류 525/526 | 오리진 인증서가 거부됨 | 자체 서명 오리진 인증서의 경우 Full을 사용하고, Let's Encrypt의 경우 **Full (strict)**을 사용합니다. |
| 로그의 모든 방문자 IP가 Cloudflare IP로 표시됨 | Cloudflare 모드가 아님 | --behind-cloudflare 옵션으로 설치 프로그램을 다시 실행합니다. |
자세한 내용은 설치 오류를 참고하십시오.