確認
デプロイ後、以下のチェックを実行してCDNエッジノードが正常に機能していることを確認してください。terraform apply 後、cloud-initがNGINXのインストールを完了するまで2〜3分お待ちください。
ヘルスチェック
Section titled “ヘルスチェック”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 .キャッシュミス(初回リクエスト)
Section titled “キャッシュミス(初回リクエスト)”任意のパスへの初回リクエストはキャッシュミスとなり、エッジがオリジンサーバーからコンテンツを取得します:
curl -I "http://<PUBLIC_IP>/"レスポンス内の以下のヘッダーを確認してください:
X-Cache-Status: MISSX-CDN-Edge: cdn-simulatorMISS はコンテンツがキャッシュに存在せず、オリジンサーバーから取得されたことを意味します。
キャッシュヒット(以降のリクエスト)
Section titled “キャッシュヒット(以降のリクエスト)”同じリクエストをすぐに繰り返します:
curl -I "http://<PUBLIC_IP>/"期待されるヘッダー:
X-Cache-Status: HITX-CDN-Edge: cdn-simulatorHIT はオリジンサーバーに接触せず、NGINXのディスクキャッシュからレスポンスが提供されたことを確認します。
キャッシュディレクトリの検査
Section titled “キャッシュディレクトリの検査”VMにSSH接続して、ディスク上にキャッシュされたコンテンツが存在することを確認します:
ssh azureuser@<PUBLIC_IP>
# キャッシュディレクトリにコンテンツがあることを確認sudo find /var/cache/nginx/cdn -type f | head -20
# キャッシュサイズを確認sudo du -sh /var/cache/nginx/cdnNGINXのステータス
Section titled “NGINXのステータス”NGINXが起動しており、設定が有効であることを確認します:
ssh azureuser@<PUBLIC_IP>
# サービスステータスを確認sudo systemctl status nginx
# 設定を検証sudo nginx -t
# アクティブな接続を表示(stub_statusが有効な場合)curl -s http://localhost/healthオリジン接続確認
Section titled “オリジン接続確認”エッジノードがオリジンサーバーに到達できることを確認します:
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の進行状況
Section titled “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"エンドツーエンドテスト
Section titled “エンドツーエンドテスト”完全なリクエストサイクルを実行し、レスポンスチェーンを確認します:
# 初回リクエスト — 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"
# 2回目のリクエスト — 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ベンダーヘッダーの確認
Section titled “ベンダーヘッダーの確認”/headers パスをリクエストして、すべてのCDNベンダーヘッダーが注入されていることを確認します(オリジンとしてhttpbin.orgを使用している場合):
curl -s "http://<PUBLIC_IP>/headers" | python3 -m json.tool期待されるレスポンスには、5つのベンダー全てのヘッダーが含まれます:
{ "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" }}デバイス検出テスト
Section titled “デバイス検出テスト”モバイルの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",トラブルシューティング
Section titled “トラブルシューティング”NGINXが起動していない場合
Section titled “NGINXが起動していない場合”ssh azureuser@<PUBLIC_IP>sudo systemctl status nginxsudo journalctl -u nginx --no-pager -n 50cloud-initが完了していない場合
Section titled “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を示す場合
Section titled “キャッシュが常にMISSを示す場合”- オリジンがキャッシュ可能なレスポンスコード(200、301、302)を返していることを確認してください
- オリジンが
Cache-Control: no-cacheまたはno-storeヘッダーを送信していないことを確認してください - NGINXエラーログを確認してください:
sudo tail -f /var/log/nginx/error.log
ポート80/443で接続が拒否される場合
Section titled “ポート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"