
구매한 도메인(taekjun.cloud)으로 접속했을 때, 개인 서버에 Docker로 올라가 있는 nginx 웹 페이지로 연결되도록 설계하는 과정입니다.
도메인을 구매했다고 해서 자동으로 어딘가로 연결되는 것은 아닙니다.
DNS 레코드가 "이 도메인으로 오는 요청을 어느 IP로 보내라" 는 매핑 정보를 제공해야 연결이 됩니다.
쉽게 말하면, 도메인은 간판이고 DNS 레코드는 그 간판 뒤에 적힌 실제 주소입니다.

브라우저에 taekjun.cloud를 입력하면 아래 순서로 동작합니다.
OS가 DNS 서버에 "이 도메인의 IP가 뭐야?" 라고 질의
Cloudflare DNS가 레코드를 보고 IP 주소로 응답
브라우저가 해당 IP로 HTTP 요청을 전송
개인 서버는 Daejeon LAN에 위치해 있고, 앞단에 wisoft-nginx-reverse-proxy가 있습니다.
(Nangman Infra 아키텍처 참고)

따라서 DNS A 레코드의 IPv4 address에는 wisoft NPM의 공인 IP를 입력합니다.

| 타입 | 가리키는 대상 | 비고 |
|---|---|---|
| A | IPv4 주소 | ✅ 이번에 사용 |
| AAAA | IPv6 주소 | NPM 서버가 IPv4 기반 |
| CNAME | 다른 도메인 | 루트 도메인에 사용 불가, 서브도메인 별칭용 |
| MX | 메일 서버 | 메일 전용 |
| TXT | 텍스트 정보 | 도메인 소유 인증, SPF 등 |
Proxy Status를 OFF로 설정하는 이유
Proxy를 켜면 트래픽이 Cloudflare 서버를 경유합니다.
NPM에서 Let's Encrypt SSL 인증서를 발급할 때 HTTP Challenge 방식을 사용합니다.
이 방식은 Let's Encrypt가 도메인으로 직접 HTTP 요청을 날려서 소유권을 검증하는데,
Cloudflare가 중간에 끼면 검증 요청이 막히거나 꼬일 수 있습니다.
따라서 인증서 발급 시에는 Proxy를 OFF 로 설정해야 합니다.
설정 후 nslookup으로 A 레코드가 정상적으로 조회되는 것을 확인합니다.

Let's Encrypt 인증서 발급 방식은 두 가지입니다.
| 방식 | 동작 | 조건 |
|---|---|---|
| HTTP Challenge | Let's Encrypt가 http://도메인/.well-known/... 으로 직접 접근해서 확인 | 80포트가 외부에 열려있어야 함 |
| DNS Challenge | Let's Encrypt가 DNS TXT 레코드를 확인해서 검증 | DNS 편집 권한 필요 |
NPM에서 Cloudflare DNS Challenge 방식을 사용하려면, NPM이 Cloudflare에 TXT 레코드를 자동으로 추가/삭제해야 합니다.
이때 NPM이 Cloudflare API에 접근할 수 있도록 인증하는 열쇠가 바로 API Token입니다.
Cloudflare 대시보드 → My Profile → API Tokens에서 Zone.DNS 편집 권한으로 토큰을 생성합니다.

현재 상태는 HTTP만 가능한 상태입니다. HTTPS를 사용하려면 SSL/TLS 인증서가 필요합니다.
taekjun.cloud가 맞다"는 것을 인증기관(CA)이 보증합니다. 없으면 브라우저가 "연결이 안전하지 않음" 경고를 표시합니다.무료 CA인 Let's Encrypt가 인증서를 발급해 주며, NPM이 이 과정을 자동으로 처리하고 90일마다 자동 갱신합니다.
NPM GUI → SSL Certificates → Add Let's Encrypt Certificate에서 아래 항목을 입력합니다.
test.taekjun.cloud발급 로그에서 성공 메시지를 확인할 수 있습니다.

NPM GUI → Proxy Hosts → Add Proxy Host에서 아래와 같이 설정합니다.
| 항목 | 값 |
|---|---|
| Domain Names | test.taekjun.cloud |
| Scheme | http |
| Forward Hostname / IP | 개인 Ubuntu 서버 사설 IP |
| Forward Port | 80 |
| SSL Certificate | 방금 발급한 Let's Encrypt 인증서 선택 |
개인 서버는 외부에 직접 노출되어 있지 않으므로 사설 IP를 입력합니다.
WireGuard를 사용하고 있다면 WireGuard 대역 IP를 입력해도 됩니다.
설정 후 Proxy Host 상태가 Online으로 표시되면 정상입니다.

Proxy Host가 Online임에도 불구하고 https://test.taekjun.cloud 접속 시 502 Bad Gateway가 발생했습니다.

NPM에서 Proxy Host 설정을 확인해보니 Forward 주소가 아래와 같이 잡혀 있었습니다.
https://192.168.x.x:80

원인: Scheme이 https로 설정되어 있어, NPM이 개인 서버 nginx에 HTTPS 요청을 보내고 있었습니다.
그러나 개인 서버의 nginx는 HTTP(80포트)만 리스닝하고 있어 HTTPS 핸드셰이크 자체가 실패한 것입니다.
해결: Scheme을 https → http로 변경
http://192.168.x.x:80
브라우저 → NPM 구간은 HTTPS여도 무관하지만, NPM → 개인 서버 구간은 실제 서버가 리스닝하는 프로토콜과 일치시켜야 합니다.
변경 후 정상적으로 접속되는 것을 확인했습니다.
DNS에 대해 더 심도있게 공부하고 포스트할 예정입니다.
정택준
Email: taekjunnnn@gmail.com
Team: https://nangman.cloud/