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 :
- L'identifiant du nœud CDN actuel et le nombre de boucles incrémenté (par exemple,
my_cdn; loops=2). - Les autres entrées restantes de l'en-tête
CDN-Loopd'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
-
Détection : Le module analyse l'en-tête
CDN-Looppour 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. -
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-Looppour les proxies en aval. -
Blocage : Si le nombre de boucles détectées dépasse
loop_detect_max_allow_loops, NGINX renvoie leloop_detect_statusconfiguré (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.