Pular para o conteúdo

Visão Geral

Este componente simula um nó de borda CDN para ambientes de laboratório e demonstração. Ele representa o papel que fornecedores como Akamai, Cloudflare, Amazon CloudFront ou Fastly desempenham na arquitetura de rede de um cliente — a camada de cache mais próxima dos usuários finais, situada na frente de um servidor de origem.

Em arquiteturas de múltiplos fornecedores em produção, os clientes comumente combinam um CDN de terceiros com o F5 Distributed Cloud:

End User → CDN Edge (Akamai/Cloudflare/etc.) → F5 XC HTTP LB → Origin App

Este simulador substitui o CDN comercial por um nó de borda baseado em NGINX, permitindo que a integração seja demonstrada e testada sem contratos com fornecedores ou infraestrutura de produção.

┌─────────┐ ┌──────────────────────┐ ┌─────────────────┐ ┌────────────┐
│ Client │────▶│ CDN Edge (NGINX) │────▶│ F5 XC HTTP LB │────▶│ Origin App │
│ │ │ Ubuntu 24.04 Azure │ │ (Origin Server) │ │ │
└─────────┘ │ - TLS termination │ └─────────────────┘ └────────────┘
│ - Disk-based cache │
│ - X-Cache-Status │
└──────────────────────┘

O nó de borda NGINX:

  • Encerra o TLS na borda (autoassinado ou Let’s Encrypt)
  • Armazena respostas em cache no disco utilizando proxy_cache_path
  • Encaminha erros de cache para um servidor de origem configurável (o VIP do balanceador de carga HTTP F5 XC)
  • Reporta o status do cache por meio do cabeçalho de resposta X-Cache-Status (HIT, MISS, BYPASS, EXPIRED)
Função CDNImplementação NGINX
Cache de bordaproxy_cache com armazenamento em disco
Geração de chave de cacheproxy_cache_key baseada em esquema, host e URI
Busca na origemproxy_pass para o balanceador de carga HTTP F5 XC
Encerramento de TLSDiretiva NGINX ssl_certificate
Respeito ao Cache-Controlproxy_cache_valid com passagem dos cabeçalhos de origem
Relatório de status do cacheadd_header X-Cache-Status $upstream_cache_status
Endpoint de saúdeLocalização /health retornando 200 OK

Endpoints e Comportamento de Requisição/Resposta

Seção intitulada “Endpoints e Comportamento de Requisição/Resposta”
GET /health

Resposta (200 OK, Content-Type: application/json):

{
"status": "healthy",
"component": "cdn-edge",
"engine": "nginx",
"vendor_profiles": ["akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door"]
}
GET /<any-path>

Cabeçalhos de requisição injetados em direção à origem (mais de 67 cabeçalhos de 5 fornecedores):

CategoriaCabeçalhos Adicionados
IP do ClienteTrue-Client-IP, CF-Connecting-IP, Fastly-Client-IP, X-Azure-ClientIP, CloudFront-Viewer-Address, X-Forwarded-For, X-Real-IP
GeolocalizaçãoX-Akamai-Edgescape (composto), CF-IPCountry, cf-ipcity, cf-iplatitude/longitude, CloudFront-Viewer-Country/City/Latitude/Longitude, X-Geo-Country-Code/City/Region
Detecção de DispositivoCloudFront-Is-Mobile-Viewer, CloudFront-Is-Desktop-Viewer, CloudFront-Is-Tablet-Viewer, X-Akamai-Device-Characteristics
TLS/FingerprintCloudFront-Viewer-TLS, cf-ja3-hash, cf-ja4, CloudFront-Viewer-JA3-Fingerprint
Detecção de Botcf-bot-score (85 = provavelmente humano), cf-verified-bot
Rastreamento de RequisiçãoCf-Ray, X-Akamai-Request-ID, X-Amz-Cf-Id, X-Azure-Ref
Identidade de BordaX-CDN-Edge, X-CDN-POP, X-Served-By, Fastly-FF, X-Azure-FDID
PadrãoVia, Forwarded, CDN-Loop, X-Forwarded-Proto/Host/Port

Cabeçalhos de resposta adicionados a cada resposta intermediada:

CabeçalhoValoresFinalidade
X-Cache-StatusHIT, MISS, BYPASS, EXPIRED, STALEComportamento do cache para esta requisição
X-CDN-Edgecdn-simulatorIdentifica este nó de borda
X-CDN-POPSJCCódigo IATA do Ponto de Presença simulado
X-Served-Bycache-sjc3120-SJCNó de cache simulado no formato Fastly
X-Request-IDUUID (por requisição)Identificador único da requisição
  • Primeira requisição a qualquer caminho: X-Cache-Status: MISS (buscado na origem, agora em cache)
  • Requisições idênticas subsequentes: X-Cache-Status: HIT (servido a partir do cache em disco)
  • Chave de cache: $scheme$host$request_uri (esquema + hostname + caminho completo + query string)
  • TTL do cache: 10 minutos para 200/301/302, 1 minuto para 404
  • Entrega de conteúdo desatualizado: retorna conteúdo em cache em caso de erros na origem (500/502/503/504)
Método de AcessoComando/Caminho
SSHssh azureuser@<PUBLIC_IP>
Configuração do NGINX/etc/nginx/conf.d/cdn-edge.conf
Logs do NGINX/var/log/nginx/access.log e /var/log/nginx/error.log
Diretório de cache/var/cache/nginx/cdn/
Log do Cloud-init/var/log/cloud-init-output.log

Este é um componente de um ambiente de laboratório maior. Cada componente é independente e implantado separadamente:

  • Este componente fornece a borda CDN (NGINX em VM do Azure)
  • Outros componentes fornecem a aplicação de origem, a configuração do F5 XC, DNS, políticas de WAF, etc.

O operador humano adiciona componentes um por vez. A documentação de cada componente é escrita de forma que um assistente de IA possa lê-la e implantar a infraestrutura de forma autônoma.

O NGINX foi selecionado como motor de simulação de CDN porque:

  1. Produto F5 — a F5 adquiriu a NGINX Inc. em 2019; ele faz parte do portfólio da F5
  2. Comprovado pela indústria — o Cloudflare operou todo o seu CDN com NGINX por mais de uma década antes de migrar para o Pingora; a Netflix utiliza NGINX para seu CDN Open Connect
  3. Processo único — lida com encerramento de TLS e cache em um único binário, ao contrário do Varnish, que requer um proxy TLS separado
  4. Implantação simplesapt install nginx no Ubuntu 24.04, duas diretivas habilitam o cache
  5. Bem documentado — documentação oficial abrangente para cache de conteúdo e configuração de proxy reverso