Aller au contenu

loop-detect: Support de l'en-tête CDN-Loop pour la prévention des boucles de requêtes

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_loop_detect_module.so;

Ce document décrit nginx-module-loop-detect v0.1.0 publié le 06 janvier 2026.


http {
    # Activer le module dans un bloc location
    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;
        }
    }
}

Directives

loop_detect

Syntaxe : loop_detect on | off;

Par défaut : loop_detect off;

Contexte : http, server, location

Active ou désactive la détection de boucle pour le contexte actuel. Lorsqu'elle est activée, le module vérifie l'en-tête CDN-Loop pour suivre le nombre de sauts et bloque les requêtes dépassant la limite autorisée.

loop_detect_cdn_id

Syntaxe : loop_detect_cdn_id string;

Par défaut : loop_detect_cdn_id openresty;

Contexte : http, server, location

Définit l'identifiant unique pour vos clusters. Cet identifiant est utilisé pour analyser et suivre les boucles dans l'en-tête CDN-Loop.

loop_detect_status

Syntaxe : loop_detect_status code;

Par défaut : loop_detect_status 508;

Contexte : http, server, location

Définit le code d'état HTTP renvoyé lorsqu'une requête dépasse la limite de boucle autorisée. Le code doit être compris entre 400 et 599 (erreurs client ou serveur).

loop_detect_max_allow_loops

Syntaxe : loop_detect_max_allow_loops number;

Par défaut : loop_detect_max_allow_loops 10;

Contexte : http, server, location

Définit le nombre maximum de boucles autorisées avant de bloquer la requête. Le nombre doit être supérieur à 0.

Variables

$loop_detect_current_loops

Renvoie le nombre actuel de boucles détectées extrait de l'en-tête CDN-Loop. Cette valeur représente le nombre de sauts que votre requête a déjà franchis à travers les nœuds CDN.

$loop_detect_proxy_add_cdn_loop

Construit la nouvelle valeur de l'en-tête CDN-Loop à envoyer aux proxies en aval. Cette valeur inclut :

  1. L'identifiant du nœud CDN actuel et le nombre de boucles incrémenté (par exemple, my_cdn; loops=2).
  2. Les autres entrées restantes de l'en-tête CDN-Loop d'origine (le cas échéant).

Exemple d'utilisation :

location / {
    proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
    proxy_pass http://backend;
}

Comment ça fonctionne

  1. Détection : Le module analyse l'en-tête CDN-Loop pour identifier le nombre de sauts. Chaque saut est formaté comme suit : Format : Cdn-Loop: <cdn_id>; loops=<count>, ... Exemple : Cdn-Loop: my_cdn; loops=2, another_cdn; loops=1.

  2. Suivi : Le nombre de sauts actuel (current_loops) est extrait de l'en-tête. Le module incrémente le compteur et construit une nouvelle valeur CDN-Loop pour les proxies en aval.

  3. Blocage : Si le nombre de boucles détectées dépasse loop_detect_max_allow_loops, NGINX renvoie le loop_detect_status configuré (par exemple, 508).

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-loop-detect.