loop-detect: CDN-Loop-Header-Unterstützung zur Verhinderung von Anfrage-Schleifen
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und 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
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_loop_detect_module.so;
Dieses Dokument beschreibt nginx-module-loop-detect v0.1.0 veröffentlicht am 06. Januar 2026.
http {
# Aktivieren Sie das Modul in einem Standortblock
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;
}
}
}
Direktiven
loop_detect
Syntax: loop_detect on | off;
Standard: loop_detect off;
Kontext: http, server, location
Aktiviert oder deaktiviert die Schleifenüberwachung für den aktuellen Geltungsbereich. Wenn aktiviert, überprüft das Modul den CDN-Loop-Header, um die Anzahl der Hops zu verfolgen, und blockiert Anfragen, die das erlaubte Limit überschreiten.
loop_detect_cdn_id
Syntax: loop_detect_cdn_id string;
Standard: loop_detect_cdn_id openresty;
Kontext: http, server, location
Setzt die eindeutige Kennung für Ihre Cluster. Diese Kennung wird verwendet, um Schleifen im CDN-Loop-Header zu analysieren und zu verfolgen.
loop_detect_status
Syntax: loop_detect_status code;
Standard: loop_detect_status 508;
Kontext: http, server, location
Setzt den HTTP-Statuscode, der zurückgegeben wird, wenn eine Anfrage das erlaubte Schleifenlimit überschreitet. Der Code muss zwischen 400 und 599 liegen (Client- oder Serverfehler).
loop_detect_max_allow_loops
Syntax: loop_detect_max_allow_loops number;
Standard: loop_detect_max_allow_loops 10;
Kontext: http, server, location
Setzt die maximale Anzahl an erlaubten Schleifen, bevor die Anfrage blockiert wird. Die Zahl muss größer als 0 sein.
Variablen
$loop_detect_current_loops
Gibt die aktuell erkannte Schleifenanzahl zurück, die aus dem CDN-Loop-Header extrahiert wurde. Dieser Wert repräsentiert die Anzahl der Hops, die Ihre Anfrage bereits durch CDN-Knoten durchlaufen hat.
$loop_detect_proxy_add_cdn_loop
Konstruiert den neuen CDN-Loop-Headerwert, der an nachgelagerte Proxys gesendet werden soll. Dieser Wert umfasst:
- Die Kennung des aktuellen CDN-Knotens und die inkrementierte Schleifenanzahl (z. B.
my_cdn; loops=2). - Verbleibende andere Einträge aus dem ursprünglichen
CDN-Loop-Header (sofern vorhanden).
Beispielverwendung:
location / {
proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
proxy_pass http://backend;
}
Wie es funktioniert
-
Erkennung: Das Modul analysiert den
CDN-Loop-Header, um die Anzahl der Hops zu identifizieren. Jeder Hop ist formatiert als: Format:Cdn-Loop: <cdn_id>; loops=<count>, ...Beispiel:Cdn-Loop: my_cdn; loops=2, another_cdn; loops=1. -
Verfolgung: Die aktuelle Hop-Anzahl (current_loops) wird aus dem Header extrahiert. Das Modul inkrementiert die Anzahl und konstruiert einen neuen
CDN-Loop-Wert für nachgelagerte Proxys. -
Blockierung: Wenn die erkannte Schleifenanzahl
loop_detect_max_allow_loopsüberschreitet, gibt NGINX den konfiguriertenloop_detect_statuszurück (z. B. 508).
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-loop-detect.