fn-knock 앞단에 Tencent Cloud EdgeOne 배치
EdgeOne을 fn-knock 앞단의 DNS, TLS, 엣지 엔드포인트로 사용할 수 있습니다. 연동 후에도 인증 Host와 서비스 Host는 fn-knock에서 처리합니다. 엣지 플랫폼이 동적 로그인 페이지를 정적 콘텐츠로 캐시하거나 실제 클라이언트 IP를 누락하게 만들어서는 안 됩니다.
연동 전 확인 사항
- fn-knock 서브도메인 매핑을 로컬 또는 인터넷 엔드포인트에서 이미 검증했습니다.
- 공개할 Host마다 업스트림 대상과 접근 정책을 명확히 정했습니다.
- EdgeOne에서 오리진 주소, 포트, 프로토콜로 접속할 수 있습니다.
- 모바일 네트워크에서 접속할 테스트 도메인을 준비했습니다.
핵심 설정
서브도메인 매핑 → 서브도메인 모드 설정 → Edge 실제 IP 감지에서Tencent EdgeOne을 선택합니다. 게이트웨이는EO-Connecting-IP를 읽어 클라이언트 IP로 사용하고X-Forwarded-For를 통해 인증 서비스에 전달합니다.- EdgeOne에 도메인을 추가하고 인증 Host와 서비스 Host의 오리진을 fn-knock 게이트웨이 엔드포인트로 구성합니다.
- 요청 Host, WebSocket Upgrade, EdgeOne 실제 클라이언트 IP 헤더가 오리진까지 전달되도록 합니다.
- 인증, 콜백, 동적 서비스 경로에는 캐시 우회 규칙을 적용합니다. 캐시 정책은 서비스별로 판단하고 로그인 페이지를 일괄 캐시하지 않습니다.
- EdgeOne에 HTTPS를 구성한 뒤 외부 네트워크에서 인증 Host, 서비스 Host, WebSocket과 장시간 연결 서비스를 차례로 테스트합니다.
오리진 설정
인증 Host와 서비스 Host는 같은 오리진 주소와 포트를 사용할 수 있습니다. 하지만 fn-knock가 올바른 매핑을 찾을 수 있도록 오리진 요청에서 사용자가 접속한 Host를 보존합니다. 오리진 대상은 기본 7999인 게이트웨이 엔드포인트이며, 관리 엔드포인트 7991이나 내부 백엔드 7998이 아닙니다.
TLS 종료 위치에 따라 오리진 프로토콜을 선택합니다.
| 외부 TLS | EdgeOne에서 fn-knock까지 | fn-knock 측 요구 사항 |
|---|---|---|
| EdgeOne에서 HTTPS 종료, HTTP 오리진 | HTTP | 오리진 포트에 접속할 수 있어야 하며 앞단이 외부 프로토콜을 올바르게 전달해야 함 |
| EdgeOne에서 HTTPS 종료, HTTPS 오리진 | HTTPS | fn-knock 인증서가 오리진 Host를 포함하고 EdgeOne이 인증서 체인을 신뢰해야 함 |
| 종단 간 HTTPS | HTTPS | Edge 인증서와 오리진 인증서를 모두 검증 |
인증 페이지, 인증 API, OIDC/QQ 콜백, 로그아웃, 세션 상태, Set-Cookie가 포함된 응답은 모두 캐시를 우회합니다. 서비스의 캐시 가능 여부는 자체 응답 헤더와 로그인 방식에 따라 판단합니다. 파일 확장자만 보고 정적 콘텐츠라고 가정해서는 안 됩니다.
실제 IP 헤더 보호
EdgeOne 제공자를 선택하면 게이트웨이는 EO-Connecting-IP의 의미를 신뢰합니다. 오리진 포트에 임의의 인터넷 클라이언트가 계속 직접 접속할 수 있다면 공격자가 EdgeOne을 우회하고 해당 요청 헤더를 직접 만들 수 있습니다. 방화벽, 오리진 접근 제어 또는 인터넷에서 라우팅되지 않는 오리진 경로를 사용하여 게이트웨이 엔드포인트가 EdgeOne 오리진 요청과 꼭 필요한 운영 점검만 받도록 제한합니다.
전환 중에는 관리자 전용 직접 연결 테스트 Host를 잠시 유지할 수 있지만 정식 서비스와 광범위한 인터넷 허용 규칙을 공유하게 두면 안 됩니다. 검증 후 롤백용 DNS를 제거하거나 출발지를 제한합니다.
검증 항목
동일한 출발지 IP에서만 시험하지 않도록 모바일 데이터와 별도의 외부 네트워크에서 각각 접속합니다.
- 인증 Host를 열어 로그인하지 않은 상태에서 인증 페이지가 보이는지 확인합니다.
- 로그인한 뒤 서비스 Host에 접속하여 원래 대상으로 돌아오고 리디렉션이 반복되지 않는지 확인합니다.
요청 로그에서클라이언트 IP가 실제 사용자 주소인지 확인합니다.연결 출발지 IP는 EdgeOne 노드 주소일 수 있으며EO-Connecting-IP도 표시되는지 확인합니다.- Host, 인증 결과, 업스트림 대상(타깃), 응답 상태가 현재 요청과 일치하는지 확인합니다.
- WebSocket, 파일 업로드/다운로드, 로그아웃을 테스트하고 로그아웃 후 로그인이 필요한 Host에 다시 접속합니다.
- EdgeOne을 거치지 않는 주소로 오리진에 직접 접속하여 네트워크 계층에서 거부되는지 확인합니다.
로그인 리디렉션 루프, 페이지 리소스 오류, 출발지 지역 오판이 발생한다면 캐시, 쿠키 도메인, 오리진 Host, 외부 프로토콜, 실제 IP 헤더를 순서대로 확인합니다. 요청이 fn-knock 로그에 전혀 나타나지 않으면 DNS, EdgeOne 오리진 상태, 오리진 네트워크 계층을 확인합니다. 로그에 요청이 있지만 502가 반환된다면 fn-knock에서 서비스 대상(타깃)까지의 경로를 확인합니다.
롤백
변경 전에 기존 DNS, 오리진 주소, 포트, 프로토콜, 캐시 규칙을 기록합니다. 롤백할 때는 먼저 기존 DNS를 복원하거나 가속 도메인을 비활성화한 다음 fn-knock의 Edge 실제 IP 제공자를 현재 엔드포인트에 맞는 옵션으로 되돌립니다. DNS가 완전히 전파되기 전에는 두 경로 모두 요청을 받을 수 있으므로 어느 한쪽에서 오래된 인증 콘텐츠를 제공하지 않도록 주의합니다.
EdgeOne의 UI, 요금제, 오리진 옵션은 변경될 수 있으므로 엣지 측 설정은 EdgeOne 공식 문서를 기준으로 진행합니다.
