콘텐츠로 이동

개요

이 구성 요소는 랩 및 데모 환경을 위한 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"]
}
GET /<any-path>

오리진을 향해 주입되는 요청 헤더 (5개 벤더의 67개 이상 헤더):

카테고리추가되는 헤더
클라이언트 IPTrue-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-StatusHIT, MISS, BYPASS, EXPIRED, STALE이 요청에 대한 캐시 동작
X-CDN-Edgecdn-simulator이 엣지 노드를 식별
X-CDN-POPSJC시뮬레이션된 PoP(Point of Presence) IATA 코드
X-Served-Bycache-sjc3120-SJCFastly 형식의 시뮬레이션된 캐시 노드
X-Request-IDUUID (요청당)고유 요청 식별자
  • 특정 경로에 대한 첫 번째 요청: X-Cache-Status: MISS (오리진에서 가져온 후 캐시됨)
  • 이후 동일한 요청: X-Cache-Status: HIT (디스크 캐시에서 제공됨)
  • 캐시 키: $scheme$host$request_uri (스킴 + 호스트명 + 전체 경로 + 쿼리 문자열)
  • 캐시 TTL: 200/301/302에 대해 10분, 404에 대해 1분
  • 오래된 콘텐츠 제공: 오리진 오류(500/502/503/504) 시 캐시된 콘텐츠를 반환
접근 방법명령어/경로
SSHssh 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는 CDN 시뮬레이션 엔진으로 다음과 같은 이유로 선택되었습니다:

  1. F5 제품 — F5는 2019년 NGINX Inc.를 인수했으며, F5 포트폴리오의 일부입니다
  2. 업계 검증 — Cloudflare는 Pingora로 마이그레이션하기 전 10년 이상 전체 CDN을 NGINX로 운영했으며, Netflix는 Open Connect CDN에 NGINX를 사용합니다
  3. 단일 프로세스 — 별도의 TLS 프록시가 필요한 Varnish와 달리, 하나의 바이너리로 TLS 종료와 캐싱을 처리합니다
  4. 간편한 배포 — Ubuntu 24.04에서 apt install nginx로 설치하며, 두 가지 지시어로 캐싱을 활성화합니다
  5. 풍부한 문서 — 콘텐츠 캐싱 및 리버스 프록시 구성에 대한 방대한 공식 문서가 있습니다