Zum Inhalt

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:

  1. Die Kennung des aktuellen CDN-Knotens und die inkrementierte Schleifenanzahl (z. B. my_cdn; loops=2).
  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

  1. 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.

  2. 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.

  3. Blockierung: Wenn die erkannte Schleifenanzahl loop_detect_max_allow_loops überschreitet, gibt NGINX den konfigurierten loop_detect_status zurü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.