- Início
- Simulador CDN
- Verificar
Verificar
Após a implantação, execute estas verificações para confirmar que o nó de borda CDN está funcionando corretamente. Aguarde 2 a 3 minutos após o terraform apply para que o cloud-init conclua a instalação do NGINX.
Verificação de Integridade
Seção intitulada “Verificação de Integridade”Verifique se o NGINX está em execução e respondendo:
curl -s "http://<PUBLIC_IP>/health" | jq .Saída esperada:
{ "status": "healthy", "component": "cdn-edge", "engine": "nginx", "vendor_profiles": [ "akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door" ]}Se estiver usando outputs do Terraform:
curl -s "$(terraform output -raw health_check_url)" | jq .Cache Miss (Primeira Requisição)
Seção intitulada “Cache Miss (Primeira Requisição)”A primeira requisição para qualquer caminho será um cache miss — o nó de borda busca da origem:
curl -I "http://<PUBLIC_IP>/"Procure estes cabeçalhos na resposta:
X-Cache-Status: MISSX-CDN-Edge: cdn-simulatorMISS significa que o conteúdo não estava no cache e foi buscado no servidor de origem.
Cache Hit (Requisição Subsequente)
Seção intitulada “Cache Hit (Requisição Subsequente)”Repita a mesma requisição imediatamente:
curl -I "http://<PUBLIC_IP>/"Cabeçalhos esperados:
X-Cache-Status: HITX-CDN-Edge: cdn-simulatorHIT confirma que a resposta foi servida a partir do cache em disco do NGINX sem contatar a origem.
Inspeção do Diretório de Cache
Seção intitulada “Inspeção do Diretório de Cache”Acesse a VM via SSH para verificar se o conteúdo em cache existe no disco:
ssh azureuser@<PUBLIC_IP>
# Verificar se o diretório de cache possui conteúdosudo find /var/cache/nginx/cdn -type f | head -20
# Verificar o tamanho do cachesudo du -sh /var/cache/nginx/cdnStatus do NGINX
Seção intitulada “Status do NGINX”Verifique se o NGINX está em execução e se a configuração é válida:
ssh azureuser@<PUBLIC_IP>
# Verificar status do serviçosudo systemctl status nginx
# Validar configuraçãosudo nginx -t
# Visualizar conexões ativas (se stub_status estiver habilitado)curl -s http://localhost/healthConectividade com a Origem
Seção intitulada “Conectividade com a Origem”Verifique se o nó de borda consegue alcançar o servidor de origem:
ssh azureuser@<PUBLIC_IP>
# Testar conectividade com a origem (substitua pela sua URL de origem)curl -I "https://your-origin.example.com/"Se isso falhar, verifique:
- Se a variável
origin_serverestá correta na configuração do Terraform - Se o servidor de origem permite conexões de entrada a partir do IP público do nó de borda
- Se a resolução de DNS funciona a partir da VM (
nslookup your-origin.example.com)
Progresso do Cloud-Init
Seção intitulada “Progresso do Cloud-Init”Monitore o progresso do provisionamento por meio do log do cloud-init:
ssh azureuser@<PUBLIC_IP> "tail -f /var/log/cloud-init-progress.log"Fases esperadas: [init], [nic] (detecção dinâmica de NIC), [complete].
Se o cloud-init reportar erros:
ssh azureuser@<PUBLIC_IP> "sudo cloud-init status --long"Teste de Ponta a Ponta
Seção intitulada “Teste de Ponta a Ponta”Execute um ciclo completo de requisição e verifique a cadeia de resposta:
# Primeira requisição — MISS (busca da origem)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"
# Segunda requisição — HIT (servida do cache)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"Saída esperada:
=== Request 1 (expect MISS) ===HTTP 200 | Cache: MISS=== Request 2 (expect HIT) ===HTTP 200 | Cache: HITVerificação de Cabeçalhos de Fornecedores
Seção intitulada “Verificação de Cabeçalhos de Fornecedores”Verifique se todos os cabeçalhos de fornecedores CDN estão sendo injetados ao requisitar o caminho /headers (quando se usa httpbin.org como origem):
curl -s "http://<PUBLIC_IP>/headers" | python3 -m json.toolA resposta esperada inclui cabeçalhos de todos os cinco fornecedores:
{ "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" }}Teste de Detecção de Dispositivo
Seção intitulada “Teste de Detecção de Dispositivo”Teste com um User-Agent de dispositivo móvel para verificar se os cabeçalhos de detecção de dispositivo são alterados:
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"Esperado:
"Cloudfront-Is-Desktop-Viewer": "false","Cloudfront-Is-Mobile-Viewer": "true",Solução de Problemas
Seção intitulada “Solução de Problemas”NGINX não está em execução
Seção intitulada “NGINX não está em execução”ssh azureuser@<PUBLIC_IP>sudo systemctl status nginxsudo journalctl -u nginx --no-pager -n 50Cloud-init não foi concluído
Seção intitulada “Cloud-init não foi concluído”Após o terraform apply, o cloud-init leva de 2 a 3 minutos. Verifique o progresso:
ssh azureuser@<PUBLIC_IP>sudo cloud-init statussudo tail -f /var/log/cloud-init-output.logCache sempre exibindo MISS
Seção intitulada “Cache sempre exibindo MISS”- Verifique se a origem retorna códigos de resposta cacheáveis (200, 301, 302)
- Verifique se a origem não envia cabeçalhos
Cache-Control: no-cacheouno-store - Verifique os logs de erro do NGINX:
sudo tail -f /var/log/nginx/error.log
Conexão recusada na porta 80/443
Seção intitulada “Conexão recusada na porta 80/443”- Verifique se as regras do NSG estão aplicadas:
az network nsg rule list --nsg-name "$(terraform output -raw nsg_name)" --resource-group "$(terraform output -raw resource_group_name)" -o table - Verifique se o NGINX está escutando:
ssh azureuser@<PUBLIC_IP> "sudo ss -tlnp | grep nginx"