loop-detect: suporte ao cabeçalho CDN-Loop para prevenção de loops de requisição
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-loop-detect
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-loop-detect
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_loop_detect_module.so;
Este documento descreve o nginx-module-loop-detect v0.1.0 lançado em 06 de janeiro de 2026.
http {
# Ative o módulo em um bloco de localização
loop_detect on;
loop_detect_cdn_id my_cdn_id;
loop_detect_status 508;
loop_detect_max_allow_loops 10;
server {
listen 80;
server_name example.com;
location / {
proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
proxy_pass http://example.upstream.com;
}
}
}
Diretrizes
loop_detect
Sintaxe: loop_detect on | off;
Padrão: loop_detect off;
Contexto: http, server, location
Habilita ou desabilita a detecção de loops para o escopo atual. Quando habilitado, o módulo verifica o cabeçalho CDN-Loop para rastrear o número de saltos e bloqueia requisições que excedem o limite permitido.
loop_detect_cdn_id
Sintaxe: loop_detect_cdn_id string;
Padrão: loop_detect_cdn_id openresty;
Contexto: http, server, location
Define o identificador único para seus clusters. Este identificador é usado para analisar e rastrear loops no cabeçalho CDN-Loop.
loop_detect_status
Sintaxe: loop_detect_status code;
Padrão: loop_detect_status 508;
Contexto: http, server, location
Define o código de status HTTP retornado quando uma requisição excede o limite de loops permitido. O código deve estar entre 400 e 599 (erros de cliente ou servidor).
loop_detect_max_allow_loops
Sintaxe: loop_detect_max_allow_loops number;
Padrão: loop_detect_max_allow_loops 10;
Contexto: http, server, location
Define o número máximo de loops permitidos antes de bloquear a requisição. O número deve ser maior que 0.
Variáveis
$loop_detect_current_loops
Retorna a contagem atual de loops detectados extraída do cabeçalho CDN-Loop. Este valor representa o número de saltos que sua requisição já passou pelos nós do CDN.
$loop_detect_proxy_add_cdn_loop
Constrói o novo valor do cabeçalho CDN-Loop a ser enviado para proxies a jusante. Este valor inclui:
- O identificador do nó CDN atual e a contagem de loops incrementada (por exemplo,
my_cdn; loops=2). - Outras entradas restantes do cabeçalho original
CDN-Loop(se houver).
Exemplo de Uso:
location / {
proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
proxy_pass http://backend;
}
Como Funciona
-
Detecção: O módulo analisa o cabeçalho
CDN-Looppara identificar o número de saltos. Cada salto é formatado como: Formato:Cdn-Loop: <cdn_id>; loops=<count>, ...Exemplo:Cdn-Loop: my_cdn; loops=2, another_cdn; loops=1. -
Rastreamento: A contagem atual de saltos (current_loops) é extraída do cabeçalho. O módulo incrementa a contagem e constrói um novo valor
CDN-Looppara proxies a jusante. -
Bloqueio: Se a contagem de loops detectada exceder
loop_detect_max_allow_loops, o NGINX retorna oloop_detect_statusconfigurado (por exemplo, 508).
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-loop-detect.