docs: Cloudflare Tunnel·NPM·Full과 PB HTTP 정리

Made-with: Cursor
This commit is contained in:
2026-04-13 14:23:04 +09:00
parent a0979ecefb
commit e8e7a02450
2 changed files with 14 additions and 1 deletions

View File

@@ -67,4 +67,4 @@ docker build \
### API 도메인에서 `ERR_SSL_VERSION_OR_CIPHER_MISMATCH`가 날 때
PocketBase는 **자체 TLS 없이 HTTP**로 뜨는 경우가 많다. `https://api.todo.sori.studio`는 **프록시가 TLS를 처리**해야 한다. 443에 인증서가 없거나, 백엔드를 잘못된 프로토콜/포트로 넘기면 위 오류가 난다. 절차는 `docs/nas-deploy-guide.md` **11-1**을 본다.
PocketBase는 **자체 TLS 없이 HTTP**로 뜨는 경우가 많다. `https://api.todo.sori.studio`는 **프록시가 TLS를 처리**해야 한다. 443에 인증서가 없거나, 백엔드를 잘못된 프로토콜/포트로 넘기면 위 오류가 난다. 절차는 `docs/nas-deploy-guide.md` **11-1**을 본다. **Cloudflare Tunnel + NPM + SSL `Full`** 조합은 **11-2**를 본다.

View File

@@ -288,6 +288,19 @@ PocketBase 컨테이너는 **기본적으로 HTTPS(TLS)를 제공하지 않는
5. **터미널 확인(선택)**
`curl -vI https://api.todo.sori.studio` 로 응답 헤더·인증서 이름이 기대와 같은지 본다.
### 11-2. Cloudflare Tunnel + NPM, SSL 모드 **Full**
**`Full`의 의미(오렌지 구름·일반 프록시 기준):**
사용자↔Cloudflare는 HTTPS이고, Cloudflare↔**오리진(집의 서버)** 도 **HTTPS**로 연결하려 한다. 그래서 오리진 쪽(예: NPM이 443에서 받는 호스트)에는 **TLS가 켜져 있고**, Cloudflare가 신뢰할 수 있는지는 모드에 따라 다르다(`Full`은 자체서명도 허용, **`Full (strict)`** 는 정식 체인 필요).
**PocketBase는 HTTP만 제공**하므로, Cloudflare가 최종적으로 붙는 대상은 “PB 컨테이너”가 아니라 **그 앞의 NPM(또는 터널)** 이어야 한다. NPM이 `api.todo.sori.studio`에 대해 443에서 인증서를 내고, **내부 업스트림만** `http://192.168.50.146:42917` 같은 **HTTP**로 넘기면 된다.
**Cloudflare Tunnel을 같이 쓰는 경우** 흔한 오해:
- 터널의 **Public Hostname** 서비스 URL은 PocketBase에 맞게 **`http://` + LAN IP + 포트**(예: `http://192.168.50.146:42917`)로 두는 경우가 많다. 여기를 **`https://`…로 잘못 두면** PB는 TLS를 못 하므로 협상 오류로 이어질 수 있다.
- **Tunnel로 끝내는 호스트**와 **NPM으로만 노출하는 호스트**를 같은 서브도메인에 이중으로 겹치면 경로가 꼬이기 쉽다. `api` 한 줄은 **터널만** 또는 **NPM만** 중 하나가 실제로 받도록 정리하는 것이 좋다.
- 대시보드 **SSL/TLS → 개요**의 `Full`은, **DNS가 터널(CNAME)만 타고 오렌지 프록시를 안 쓰는 구성**과는 동작 맥락이 다를 수 있다. 문제가 나면 Zero Trust에서 해당 **Public Hostname**의 스킴·포트·대상 IP를 다시 확인한다.
---
## 12. NAS에 Git이 없을 때