Saltar a contenido

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:

  1. El identificador del nodo CDN actual y el conteo de bucles incrementado (por ejemplo, my_cdn; loops=2).
  2. Otras entradas restantes del encabezado CDN-Loop original (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

  1. Detección: El módulo analiza el encabezado CDN-Loop para 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.

  2. 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-Loop para los proxies descendentes.

  3. Bloqueo: Si el conteo de bucles detectados supera loop_detect_max_allow_loops, NGINX devuelve el loop_detect_status configurado (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.