loop-detect: Soporte para el encabezado CDN-Loop para la prevención de bucles de solicitud
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_loop_detect_module.so;
Este documento describe nginx-module-loop-detect v0.1.0 lanzado el 06 de enero de 2026.
http {
# Habilitar el módulo en un bloque de ubicación
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;
}
}
}
Directivas
loop_detect
Sintaxis: loop_detect on | off;
Predeterminado: loop_detect off;
Contexto: http, server, location
Habilita o deshabilita la detección de bucles para el ámbito actual. Cuando está habilitado, el módulo verifica el encabezado CDN-Loop para rastrear el número de saltos y bloquea las solicitudes que superan el límite permitido.
loop_detect_cdn_id
Sintaxis: loop_detect_cdn_id string;
Predeterminado: loop_detect_cdn_id openresty;
Contexto: http, server, location
Establece el identificador único para tus clústeres. Este identificador se utiliza para analizar y rastrear bucles en el encabezado CDN-Loop.
loop_detect_status
Sintaxis: loop_detect_status code;
Predeterminado: loop_detect_status 508;
Contexto: http, server, location
Establece el código de estado HTTP devuelto cuando una solicitud supera el límite de bucles permitido. El código debe estar entre 400 y 599 (errores del cliente o del servidor).
loop_detect_max_allow_loops
Sintaxis: loop_detect_max_allow_loops number;
Predeterminado: loop_detect_max_allow_loops 10;
Contexto: http, server, location
Establece el número máximo de bucles permitidos antes de bloquear la solicitud. El número debe ser mayor que 0.
Variables
$loop_detect_current_loops
Devuelve el conteo actual de bucles detectados extraído del encabezado CDN-Loop. Este valor representa el número de saltos que tu solicitud ya ha pasado a través de los nodos CDN.
$loop_detect_proxy_add_cdn_loop
Construye el nuevo valor del encabezado CDN-Loop que se enviará a los proxies descendentes. Este valor incluye:
- El identificador del nodo CDN actual y el conteo de bucles incrementado (por ejemplo,
my_cdn; loops=2). - Otras entradas restantes del encabezado
CDN-Looporiginal (si las hay).
Ejemplo de uso:
location / {
proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
proxy_pass http://backend;
}
Cómo Funciona
-
Detección: El módulo analiza el encabezado
CDN-Looppara identificar el número de saltos. Cada salto está formateado como: Formato:Cdn-Loop: <cdn_id>; loops=<count>, ...Ejemplo:Cdn-Loop: my_cdn; loops=2, another_cdn; loops=1. -
Seguimiento: El conteo actual de saltos (current_loops) se extrae del encabezado. El módulo incrementa el conteo y construye un nuevo valor de
CDN-Looppara los proxies descendentes. -
Bloqueo: Si el conteo de bucles detectados supera
loop_detect_max_allow_loops, NGINX devuelve elloop_detect_statusconfigurado (por ejemplo, 508).
GitHub
Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-loop-detect.