Pular para o conteúdo

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.

Verifique se o NGINX está em execução e respondendo:

Terminal window
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:

Terminal window
curl -s "$(terraform output -raw health_check_url)" | jq .

A primeira requisição para qualquer caminho será um cache miss — o nó de borda busca da origem:

Terminal window
curl -I "http://<PUBLIC_IP>/"

Procure estes cabeçalhos na resposta:

X-Cache-Status: MISS
X-CDN-Edge: cdn-simulator

MISS significa que o conteúdo não estava no cache e foi buscado no servidor de origem.

Repita a mesma requisição imediatamente:

Terminal window
curl -I "http://<PUBLIC_IP>/"

Cabeçalhos esperados:

X-Cache-Status: HIT
X-CDN-Edge: cdn-simulator

HIT confirma que a resposta foi servida a partir do cache em disco do NGINX sem contatar a origem.

Acesse a VM via SSH para verificar se o conteúdo em cache existe no disco:

Terminal window
ssh azureuser@<PUBLIC_IP>
# Verificar se o diretório de cache possui conteúdo
sudo find /var/cache/nginx/cdn -type f | head -20
# Verificar o tamanho do cache
sudo du -sh /var/cache/nginx/cdn

Verifique se o NGINX está em execução e se a configuração é válida:

Terminal window
ssh azureuser@<PUBLIC_IP>
# Verificar status do serviço
sudo systemctl status nginx
# Validar configuração
sudo nginx -t
# Visualizar conexões ativas (se stub_status estiver habilitado)
curl -s http://localhost/health

Verifique se o nó de borda consegue alcançar o servidor de origem:

Terminal window
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:

  1. Se a variável origin_server está correta na configuração do Terraform
  2. Se o servidor de origem permite conexões de entrada a partir do IP público do nó de borda
  3. Se a resolução de DNS funciona a partir da VM (nslookup your-origin.example.com)

Monitore o progresso do provisionamento por meio do log do cloud-init:

Terminal window
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:

Terminal window
ssh azureuser@<PUBLIC_IP> "sudo cloud-init status --long"

Execute um ciclo completo de requisição e verifique a cadeia de resposta:

Terminal window
# 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: HIT

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):

Terminal window
curl -s "http://<PUBLIC_IP>/headers" | python3 -m json.tool

A 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 com um User-Agent de dispositivo móvel para verificar se os cabeçalhos de detecção de dispositivo são alterados:

Terminal window
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",
Terminal window
ssh azureuser@<PUBLIC_IP>
sudo systemctl status nginx
sudo journalctl -u nginx --no-pager -n 50

Após o terraform apply, o cloud-init leva de 2 a 3 minutos. Verifique o progresso:

Terminal window
ssh azureuser@<PUBLIC_IP>
sudo cloud-init status
sudo tail -f /var/log/cloud-init-output.log
  • 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-cache ou no-store
  • Verifique os logs de erro do NGINX: sudo tail -f /var/log/nginx/error.log
  • 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"