개요
이 구성 요소는 랩 및 데모 환경을 위한 CDN 엣지 노드를 시뮬레이션합니다. Akamai, Cloudflare, Amazon CloudFront, Fastly와 같은 벤더가 고객의 네트워크 아키텍처에서 수행하는 역할, 즉 오리진 서버 앞에 위치하여 최종 사용자와 가장 가까운 캐싱 레이어를 나타냅니다.
프로덕션 멀티 벤더 아키텍처에서 고객은 일반적으로 서드파티 CDN을 F5 Distributed Cloud와 함께 사용합니다:
End User → CDN Edge (Akamai/Cloudflare/etc.) → F5 XC HTTP LB → Origin App이 시뮬레이터는 상용 CDN을 NGINX 기반 엣지 노드로 대체하여, 벤더 계약이나 프로덕션 인프라 없이도 통합을 시연하고 테스트할 수 있도록 합니다.
아키텍처
섹션 제목: “아키텍처”┌─────────┐ ┌──────────────────────┐ ┌─────────────────┐ ┌────────────┐│ Client │────▶│ CDN Edge (NGINX) │────▶│ F5 XC HTTP LB │────▶│ Origin App ││ │ │ Ubuntu 24.04 Azure │ │ (Origin Server) │ │ │└─────────┘ │ - TLS termination │ └─────────────────┘ └────────────┘ │ - Disk-based cache │ │ - X-Cache-Status │ └──────────────────────┘NGINX 엣지 노드:
- 엣지에서 TLS를 종료합니다 (자체 서명 인증서 또는 Let’s Encrypt)
proxy_cache_path를 사용하여 디스크에 응답을 캐시합니다- 캐시 미스를 구성 가능한 오리진 서버(F5 XC HTTP 로드 밸런서 VIP)로 전달합니다
X-Cache-Status응답 헤더를 통해 캐시 상태를 보고합니다 (HIT,MISS,BYPASS,EXPIRED)
시뮬레이션 대상
섹션 제목: “시뮬레이션 대상”| CDN 기능 | NGINX 구현 |
|---|---|
| 엣지 캐싱 | 디스크 기반 스토리지를 사용하는 proxy_cache |
| 캐시 키 생성 | 스킴, 호스트, URI 기반의 proxy_cache_key |
| 오리진 풀 | F5 XC HTTP 로드 밸런서로의 proxy_pass |
| TLS 종료 | NGINX ssl_certificate 지시어 |
| Cache-Control 준수 | 오리진 헤더 패스스루와 함께하는 proxy_cache_valid |
| 캐시 상태 보고 | add_header X-Cache-Status $upstream_cache_status |
| 헬스 엔드포인트 | 200 OK를 반환하는 /health location |
엔드포인트 및 요청/응답 동작
섹션 제목: “엔드포인트 및 요청/응답 동작”헬스 체크
섹션 제목: “헬스 체크”GET /health응답 (200 OK, Content-Type: application/json):
{ "status": "healthy", "component": "cdn-edge", "engine": "nginx", "vendor_profiles": ["akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door"]}CDN 프록시 (기타 모든 경로)
섹션 제목: “CDN 프록시 (기타 모든 경로)”GET /<any-path>오리진을 향해 주입되는 요청 헤더 (5개 벤더의 67개 이상 헤더):
| 카테고리 | 추가되는 헤더 |
|---|---|
| 클라이언트 IP | True-Client-IP, CF-Connecting-IP, Fastly-Client-IP, X-Azure-ClientIP, CloudFront-Viewer-Address, X-Forwarded-For, X-Real-IP |
| 지리적 위치 | X-Akamai-Edgescape (복합), CF-IPCountry, cf-ipcity, cf-iplatitude/longitude, CloudFront-Viewer-Country/City/Latitude/Longitude, X-Geo-Country-Code/City/Region |
| 디바이스 감지 | CloudFront-Is-Mobile-Viewer, CloudFront-Is-Desktop-Viewer, CloudFront-Is-Tablet-Viewer, X-Akamai-Device-Characteristics |
| TLS/핑거프린트 | CloudFront-Viewer-TLS, cf-ja3-hash, cf-ja4, CloudFront-Viewer-JA3-Fingerprint |
| 봇 감지 | cf-bot-score (85 = 사람일 가능성 높음), cf-verified-bot |
| 요청 추적 | Cf-Ray, X-Akamai-Request-ID, X-Amz-Cf-Id, X-Azure-Ref |
| 엣지 식별 | X-CDN-Edge, X-CDN-POP, X-Served-By, Fastly-FF, X-Azure-FDID |
| 표준 | Via, Forwarded, CDN-Loop, X-Forwarded-Proto/Host/Port |
모든 프록시 응답에 추가되는 응답 헤더:
| 헤더 | 값 | 목적 |
|---|---|---|
X-Cache-Status | HIT, MISS, BYPASS, EXPIRED, STALE | 이 요청에 대한 캐시 동작 |
X-CDN-Edge | cdn-simulator | 이 엣지 노드를 식별 |
X-CDN-POP | SJC | 시뮬레이션된 PoP(Point of Presence) IATA 코드 |
X-Served-By | cache-sjc3120-SJC | Fastly 형식의 시뮬레이션된 캐시 노드 |
X-Request-ID | UUID (요청당) | 고유 요청 식별자 |
캐시 동작
섹션 제목: “캐시 동작”- 특정 경로에 대한 첫 번째 요청:
X-Cache-Status: MISS(오리진에서 가져온 후 캐시됨) - 이후 동일한 요청:
X-Cache-Status: HIT(디스크 캐시에서 제공됨) - 캐시 키:
$scheme$host$request_uri(스킴 + 호스트명 + 전체 경로 + 쿼리 문자열) - 캐시 TTL: 200/301/302에 대해 10분, 404에 대해 1분
- 오래된 콘텐츠 제공: 오리진 오류(500/502/503/504) 시 캐시된 콘텐츠를 반환
VM 접근
섹션 제목: “VM 접근”| 접근 방법 | 명령어/경로 |
|---|---|
| SSH | ssh azureuser@<PUBLIC_IP> |
| NGINX 설정 | /etc/nginx/conf.d/cdn-edge.conf |
| NGINX 로그 | /var/log/nginx/access.log 및 /var/log/nginx/error.log |
| 캐시 디렉토리 | /var/cache/nginx/cdn/ |
| Cloud-init 로그 | /var/log/cloud-init-output.log |
모듈식 구성 요소 설계
섹션 제목: “모듈식 구성 요소 설계”이것은 더 큰 랩 환경의 일부입니다. 각 구성 요소는 독립적으로 포함되어 개별적으로 배포됩니다:
- 이 구성 요소는 CDN 엣지(Azure VM의 NGINX)를 제공합니다
- 다른 구성 요소는 오리진 애플리케이션, F5 XC 구성, DNS, WAF 정책 등을 제공합니다
운영자는 구성 요소를 하나씩 추가합니다. 각 구성 요소의 문서는 AI 어시스턴트가 읽고 인프라를 자율적으로 배포할 수 있도록 작성되어 있습니다.
NGINX를 선택한 이유
섹션 제목: “NGINX를 선택한 이유”NGINX는 CDN 시뮬레이션 엔진으로 다음과 같은 이유로 선택되었습니다:
- F5 제품 — F5는 2019년 NGINX Inc.를 인수했으며, F5 포트폴리오의 일부입니다
- 업계 검증 — Cloudflare는 Pingora로 마이그레이션하기 전 10년 이상 전체 CDN을 NGINX로 운영했으며, Netflix는 Open Connect CDN에 NGINX를 사용합니다
- 단일 프로세스 — 별도의 TLS 프록시가 필요한 Varnish와 달리, 하나의 바이너리로 TLS 종료와 캐싱을 처리합니다
- 간편한 배포 — Ubuntu 24.04에서
apt install nginx로 설치하며, 두 가지 지시어로 캐싱을 활성화합니다 - 풍부한 문서 — 콘텐츠 캐싱 및 리버스 프록시 구성에 대한 방대한 공식 문서가 있습니다