검증
배포 후 다음 검사를 실행하여 CDN 에지 노드가 올바르게 작동하는지 확인하십시오. terraform apply 후 cloud-init이 NGINX 설치를 완료할 때까지 2-3분 정도 기다리십시오.
상태 확인
섹션 제목: “상태 확인”NGINX가 실행 중이고 응답하는지 확인하십시오:
curl -s "http://<PUBLIC_IP>/health" | jq .예상 출력:
{ "status": "healthy", "component": "cdn-edge", "engine": "nginx", "vendor_profiles": [ "akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door" ]}Terraform 출력을 사용하는 경우:
curl -s "$(terraform output -raw health_check_url)" | jq .캐시 미스 (첫 번째 요청)
섹션 제목: “캐시 미스 (첫 번째 요청)”특정 경로에 대한 첫 번째 요청은 캐시 미스가 됩니다 — 에지가 오리진에서 데이터를 가져옵니다:
curl -I "http://<PUBLIC_IP>/"응답에서 다음 헤더를 확인하십시오:
X-Cache-Status: MISSX-CDN-Edge: cdn-simulatorMISS는 콘텐츠가 캐시에 없어 오리진 서버에서 가져왔음을 의미합니다.
캐시 히트 (이후 요청)
섹션 제목: “캐시 히트 (이후 요청)”동일한 요청을 즉시 반복하십시오:
curl -I "http://<PUBLIC_IP>/"예상 헤더:
X-Cache-Status: HITX-CDN-Edge: cdn-simulatorHIT는 오리진에 접속하지 않고 NGINX 디스크 캐시에서 응답이 제공되었음을 확인합니다.
캐시 디렉터리 검사
섹션 제목: “캐시 디렉터리 검사”VM에 SSH로 접속하여 캐시된 콘텐츠가 디스크에 존재하는지 확인하십시오:
ssh azureuser@<PUBLIC_IP>
# 캐시 디렉터리에 콘텐츠가 있는지 확인sudo find /var/cache/nginx/cdn -type f | head -20
# 캐시 크기 확인sudo du -sh /var/cache/nginx/cdnNGINX 상태
섹션 제목: “NGINX 상태”NGINX가 실행 중이고 구성이 유효한지 확인하십시오:
ssh azureuser@<PUBLIC_IP>
# 서비스 상태 확인sudo systemctl status nginx
# 구성 유효성 검사sudo nginx -t
# 활성 연결 확인 (stub_status가 활성화된 경우)curl -s http://localhost/health오리진 연결
섹션 제목: “오리진 연결”에지 노드가 오리진 서버에 도달할 수 있는지 확인하십시오:
ssh azureuser@<PUBLIC_IP>
# 오리진에 대한 연결 테스트 (귀하의 오리진 URL로 교체)curl -I "https://your-origin.example.com/"이 과정이 실패하는 경우 다음을 확인하십시오:
- Terraform 구성에서
origin_server변수가 올바른지 확인 - 오리진 서버가 에지 노드의 공용 IP에서 인바운드 연결을 허용하는지 확인
- VM에서 DNS 확인이 작동하는지 확인 (
nslookup your-origin.example.com)
Cloud-Init 진행 상황
섹션 제목: “Cloud-Init 진행 상황”cloud-init 로그를 통해 프로비저닝 진행 상황을 모니터링하십시오:
ssh azureuser@<PUBLIC_IP> "tail -f /var/log/cloud-init-progress.log"예상 단계: [init], [nic] (동적 NIC 감지), [complete].
cloud-init에서 오류가 보고되는 경우:
ssh azureuser@<PUBLIC_IP> "sudo cloud-init status --long"엔드-투-엔드 테스트
섹션 제목: “엔드-투-엔드 테스트”전체 요청 주기를 실행하고 응답 체인을 확인하십시오:
# 첫 번째 요청 — MISS (오리진에서 가져옴)echo "=== Request 1 (expect MISS) ==="curl -s -o /dev/null -w "HTTP %{http_code} | Cache: %{header:X-Cache-Status}\n" "http://<PUBLIC_IP>/test-path"
# 두 번째 요청 — HIT (캐시에서 제공)echo "=== Request 2 (expect HIT) ==="curl -s -o /dev/null -w "HTTP %{http_code} | Cache: %{header:X-Cache-Status}\n" "http://<PUBLIC_IP>/test-path"예상 출력:
=== Request 1 (expect MISS) ===HTTP 200 | Cache: MISS=== Request 2 (expect HIT) ===HTTP 200 | Cache: HIT벤더 헤더 검증
섹션 제목: “벤더 헤더 검증”/headers 경로를 요청하여 모든 CDN 벤더 헤더가 삽입되고 있는지 확인하십시오 (httpbin.org를 오리진으로 사용하는 경우):
curl -s "http://<PUBLIC_IP>/headers" | python3 -m json.tool예상 응답에는 다섯 개 벤더 모두의 헤더가 포함됩니다:
{ "headers": { "True-Client-Ip": "<YOUR_CLIENT_IP>", "Cf-Connecting-Ip": "<YOUR_CLIENT_IP>", "Cf-Ipcountry": "US", "Cf-Ray": "<request_id>-SJC", "Cf-Bot-Score": "85", "Cf-Ja3-Hash": "e7d705a3286e19ea42f587b344ee6865", "Cloudfront-Viewer-Country": "US", "Cloudfront-Viewer-City": "San Jose", "Cloudfront-Is-Desktop-Viewer": "true", "Cloudfront-Is-Mobile-Viewer": "false", "Fastly-Client-Ip": "<YOUR_CLIENT_IP>", "X-Akamai-Edgescape": "georegion=263,country_code=US,...", "X-Azure-Clientip": "<YOUR_CLIENT_IP>", "X-Azure-Fdid": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1", "X-Geo-Country-Code": "US" }}디바이스 감지 테스트
섹션 제목: “디바이스 감지 테스트”모바일 User-Agent로 테스트하여 디바이스 감지 헤더가 변경되는지 확인하십시오:
curl -s "http://<PUBLIC_IP>/headers?device=mobile" \ -H "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" \ | python3 -m json.tool | grep -E "Is-Mobile|Is-Desktop|is_mobile"예상 결과:
"Cloudfront-Is-Desktop-Viewer": "false","Cloudfront-Is-Mobile-Viewer": "true",문제 해결
섹션 제목: “문제 해결”NGINX가 실행되지 않는 경우
섹션 제목: “NGINX가 실행되지 않는 경우”ssh azureuser@<PUBLIC_IP>sudo systemctl status nginxsudo journalctl -u nginx --no-pager -n 50Cloud-init이 완료되지 않은 경우
섹션 제목: “Cloud-init이 완료되지 않은 경우”terraform apply 후 cloud-init은 2-3분이 소요됩니다. 진행 상황을 확인하십시오:
ssh azureuser@<PUBLIC_IP>sudo cloud-init statussudo tail -f /var/log/cloud-init-output.log캐시가 항상 MISS를 표시하는 경우
섹션 제목: “캐시가 항상 MISS를 표시하는 경우”- 오리진이 캐시 가능한 응답 코드(200, 301, 302)를 반환하는지 확인
- 오리진이
Cache-Control: no-cache또는no-store헤더를 전송하지 않는지 확인 - NGINX 오류 로그 확인:
sudo tail -f /var/log/nginx/error.log
포트 80/443에서 연결이 거부되는 경우
섹션 제목: “포트 80/443에서 연결이 거부되는 경우”- NSG 규칙이 적용되었는지 확인:
az network nsg rule list --nsg-name "$(terraform output -raw nsg_name)" --resource-group "$(terraform output -raw resource_group_name)" -o table - NGINX가 수신 대기 중인지 확인:
ssh azureuser@<PUBLIC_IP> "sudo ss -tlnp | grep nginx"