Ir al contenido

Verificar

Después del despliegue, ejecute estas comprobaciones para confirmar que el nodo edge del Simulador CDN funciona correctamente. Espere 2-3 minutos después de terraform apply para que cloud-init termine de instalar NGINX.

Verifique que NGINX esté en ejecución y respondiendo:

Ventana de terminal
curl -s "http://<PUBLIC_IP>/health" | jq .

Salida esperada:

{
"status": "healthy",
"component": "cdn-edge",
"engine": "nginx",
"vendor_profiles": [
"akamai",
"cloudflare",
"cloudfront",
"fastly",
"azure-front-door"
]
}

Si utiliza las salidas de Terraform:

Ventana de terminal
curl -s "$(terraform output -raw health_check_url)" | jq .

La primera solicitud a cualquier ruta será un error de caché — el edge obtiene el contenido desde el origen:

Ventana de terminal
curl -I "http://<PUBLIC_IP>/"

Busque estos encabezados en la respuesta:

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

MISS significa que el contenido no estaba en caché y fue obtenido del servidor de origen.

Repita la misma solicitud inmediatamente:

Ventana de terminal
curl -I "http://<PUBLIC_IP>/"

Encabezados esperados:

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

HIT confirma que la respuesta fue servida desde la caché en disco de NGINX sin contactar al origen.

Conéctese por SSH a la VM para verificar que el contenido en caché existe en disco:

Ventana de terminal
ssh azureuser@<PUBLIC_IP>
# Check cache directory has content
sudo find /var/cache/nginx/cdn -type f | head -20
# Check cache size
sudo du -sh /var/cache/nginx/cdn

Verifique que NGINX esté en ejecución y que la configuración sea válida:

Ventana de terminal
ssh azureuser@<PUBLIC_IP>
# Check service status
sudo systemctl status nginx
# Validate configuration
sudo nginx -t
# View active connections (if stub_status is enabled)
curl -s http://localhost/health

Verifique que el nodo edge pueda alcanzar el servidor de origen:

Ventana de terminal
ssh azureuser@<PUBLIC_IP>
# Test connectivity to origin (replace with your origin URL)
curl -I "https://your-origin.example.com/"

Si esto falla, verifique:

  1. Que la variable origin_server sea correcta en la configuración de Terraform
  2. Que el servidor de origen permita conexiones entrantes desde la IP pública del nodo edge
  3. Que la resolución DNS funcione desde la VM (nslookup your-origin.example.com)

Supervise el progreso del aprovisionamiento a través del registro de cloud-init:

Ventana de terminal
ssh azureuser@<PUBLIC_IP> "tail -f /var/log/cloud-init-progress.log"

Fases esperadas: [init], [nic] (detección dinámica de NIC), [complete].

Si cloud-init reporta errores:

Ventana de terminal
ssh azureuser@<PUBLIC_IP> "sudo cloud-init status --long"

Ejecute un ciclo completo de solicitudes y verifique la cadena de respuestas:

Ventana de terminal
# First request — MISS (fetches from origin)
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"
# Second request — HIT (served from 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"

Salida esperada:

=== Request 1 (expect MISS) ===
HTTP 200 | Cache: MISS
=== Request 2 (expect HIT) ===
HTTP 200 | Cache: HIT

Verificación de encabezados de proveedores CDN

Sección titulada «Verificación de encabezados de proveedores CDN»

Verifique que todos los encabezados de proveedores CDN estén siendo inyectados solicitando la ruta /headers (cuando se utiliza httpbin.org como origen):

Ventana de terminal
curl -s "http://<PUBLIC_IP>/headers" | python3 -m json.tool

La respuesta esperada incluye encabezados de los cinco proveedores:

{
"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"
}
}

Pruebe con un User-Agent móvil para verificar que los encabezados de detección de dispositivo cambien:

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

Después de terraform apply, cloud-init tarda 2-3 minutos. Verifique el progreso:

Ventana de terminal
ssh azureuser@<PUBLIC_IP>
sudo cloud-init status
sudo tail -f /var/log/cloud-init-output.log
  • Verifique que el origen devuelva códigos de respuesta almacenables en caché (200, 301, 302)
  • Compruebe que el origen no envíe encabezados Cache-Control: no-cache o no-store
  • Revise los registros de errores de NGINX: sudo tail -f /var/log/nginx/error.log
  • Verifique que las reglas de NSG estén aplicadas: az network nsg rule list --nsg-name "$(terraform output -raw nsg_name)" --resource-group "$(terraform output -raw resource_group_name)" -o table
  • Verifique que NGINX esté escuchando: ssh azureuser@<PUBLIC_IP> "sudo ss -tlnp | grep nginx"