Die Nginx-Ratenbegrenzung ist eine integrierte Funktion, die steuert, wie viele HTTP-Anfragen ein Client innerhalb eines bestimmten Zeitraums stellen kann. Sie kann missbräuchlichen Datenverkehr reduzieren, der auf APIs, Anmeldeseiten und ressourcenintensive Anwendungen abzielt, ohne dass zusätzliche Software erforderlich ist.
In dieser Anleitung konfigurieren Sie Anfragebegrenzungen in Nginx, testen sie sicher und aktivieren den Schutz auf einem Ubuntu-Server.
Wie funktioniert die Nginx-Ratenbegrenzung?
Nginx verwendet das Modul limit_req, um eingehende Anfragen zu erfassen, üblicherweise anhand der IP-Adresse des Clients.
Sie können beispielsweise einen durchschnittlichen Grenzwert von fünf Anfragen pro Sekunde festlegen und gleichzeitig kurze Anfragespitzen zulassen. Anfragen, die die zulässige Anfragespitze überschreiten, können dann abgewiesen werden.
So verhindern Sie, dass übermäßig viele Anfragen Ihre Anwendung überlasten.
Hinweis: Die Ratenbegrenzung kann bestimmte HTTP-Flood-Angriffe auf Layer 7 abschwächen. Sie kann jedoch keine großen DDoS-Angriffe auf Netzwerkebene stoppen, die Ihre Verbindung auslasten.

Voraussetzungen
Sie benötigen einen Ubuntu-Server mit installiertem Nginx, SSH-Zugriff mit sudo-Berechtigungen und eine bestehende Website oder Anwendung.
Wenn Sie Nginx zum ersten Mal einrichten, folgen Sie unserer Anleitung zum Nginx-Reverse-Proxy.
Sichern Sie Ihre bestehende Website-Konfiguration, bevor Sie Änderungen vornehmen.
Schritt 1: Zone für die Ratenbegrenzung definieren
Verbinden Sie sich per SSH mit Ihrem Server.
Erstellen Sie bei einer Standardinstallation von Nginx unter Ubuntu eine neue Konfigurationsdatei:
sudo nano /etc/nginx/conf.d/rate-limit.conf
Fügen Sie Folgendes hinzu:
limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
Diese Konfiguration verwendet die IP-Adresse des Clients, um Anfragen zu erfassen, reserviert 10 MB für die Erfassungsdaten und legt einen durchschnittlichen Grenzwert von fünf Anfragen pro Sekunde und IP-Adresse fest.
Die Direktive limit_req_zone muss innerhalb des http-Kontexts von Nginx stehen. In der Standardkonfiguration unter Ubuntu werden dort Dateien aus conf.d eingebunden.
Speichern Sie die Datei.
Schritt 2: Ratenbegrenzung für Ihre Website aktivieren
Öffnen Sie Ihre bestehende Nginx-Konfiguration für die Website:
sudo nano /etc/nginx/sites-available/app.example.com
Ersetzen Sie den Dateinamen durch den Namen Ihrer tatsächlichen Konfigurationsdatei.
Für eine HTTP-Anwendung auf Port 3000 könnte ein geschützter API-Endpunkt so aussehen:
location /api/ {
limit_req zone=perip burst=10 nodelay;
limit_req_status 429;
limit_req_dry_run on;
proxy_pass http://127.0.0.1:3000;
}
Die wichtigsten Direktiven haben folgende Funktionen:
limit_req: Wendet den zuvor definierten Grenzwert an.burst=10: Lässt eine kurze Spitze zusätzlicher Anfragen zu.nodelay: Verarbeitet zulässige Anfragen während einer Anfragespitze sofort.limit_req_status 429: Gibt HTTP 429 zurück, wenn Anfragen abgewiesen werden.limit_req_dry_run on: Protokolliert übermäßige Anfragen, ohne sie zu blockieren.
Wichtig: Fügen Sie diese Direktiven zur Ratenbegrenzung in den bestehenden, passenden location-Block ein. Erstellen Sie keine doppelten Location-Blöcke und ersetzen Sie nicht Ihre bestehende Backend-Konfiguration.
Die gezeigten Werte sind Beispiele. Wählen Sie Grenzwerte anhand des normalen Anfrageaufkommens Ihrer Anwendung.
Schritt 3: Nginx-Konfiguration überprüfen
Prüfen Sie die Konfiguration:
sudo nginx -t
Wenn die Prüfung erfolgreich ist, laden Sie die Nginx-Konfiguration neu:
sudo systemctl reload nginx
Falls ein Fehler angezeigt wird, beheben Sie ihn vor dem Neuladen.
Schritt 4: Ratenbegrenzung testen
Da der Dry-Run-Modus aktiviert ist, werden Anfragen noch nicht abgewiesen.
Überwachen Sie das Nginx-Fehlerprotokoll:
sudo tail -f /var/log/nginx/error.log
Senden Sie von einem anderen Terminal aus eine kleine Test-Anfragespitze an einen Endpunkt, den Sie kontrollieren:
for i in $(seq 1 15); do
curl -s -o /dev/null -w "%{http_code}\n" \
https://app.example.com/api/health
done
Ersetzen Sie die URL durch einen funktionierenden Endpunkt Ihrer eigenen Test- oder Staging-Anwendung.
Wenn die Anfragen den Grenzwert überschreiten, sollte Nginx Meldungen mit limiting requests, dry run im Fehlerprotokoll erfassen.
Ihre Anwendung sollte weiterhin ihre üblichen Antworten zurückgeben, da die Begrenzung noch nicht durchgesetzt wird.
Schritt 5: Ratenbegrenzung aktivieren
Nachdem Sie die Ergebnisse geprüft und bestätigt haben, dass Ihre Grenzwerte angemessen sind, entfernen Sie diese Direktive aus dem geschützten Location-Block:
limit_req_dry_run on;
Überprüfen Sie die Nginx-Konfiguration erneut und laden Sie sie neu:
sudo nginx -t
sudo systemctl reload nginx
Übermäßige Anfragen können nun mit HTTP 429 Too Many Requests beantwortet werden.
Wiederholen Sie einen kontrollierten Test und prüfen Sie die Antwortcodes. Die genauen Ergebnisse hängen vom zeitlichen Abstand der Anfragen und Ihren konfigurierten Grenzwerten ab.
So machen Sie die Änderungen rückgängig
Wenn berechtigte Nutzer betroffen sind, stellen Sie Folgendes wieder her:
limit_req_dry_run on;
Überprüfen Sie die Nginx-Konfiguration und laden Sie sie neu. Dadurch kehrt die Konfiguration in den Überwachungsmodus zurück, ohne Anfragen abzuweisen.
Anschließend können Sie die Grenzwerte anhand des tatsächlichen Datenverkehrs anpassen.
Wichtig: Nginx hinter Cloudflare oder einem anderen CDN
Wenn Nginx hinter einem Reverse-Proxy betrieben wird, gehört die für Nginx sichtbare Client-IP-Adresse möglicherweise dem Proxy statt dem ursprünglichen Besucher.
Wenn Sie dies nicht korrigieren, können bei der Anwendung von Grenzwerten pro IP-Adresse voneinander unabhängige Nutzer zusammengefasst werden.
Konfigurieren Sie mithilfe des Real-IP-Moduls von Nginx und der dokumentierten IP-Adressbereiche Ihres Proxy-Anbieters eine vertrauenswürdige Ermittlung der Client-IP-Adresse, bevor Sie Grenzwerte pro Client durchsetzen.
Vertrauen Sie niemals beliebigen IP-Headern, die von Besuchern übermittelt werden.
Ersetzt die Nginx-Ratenbegrenzung einen DDoS-Schutz?
Nein. Nginx kann übermäßige HTTP-Anfragen begrenzen, die Ihre Anwendung erreichen. Datenverkehr, der die vorgelagerte Netzwerkverbindung Ihres Servers bereits auslastet, kann Nginx jedoch nicht filtern.
Für einen umfassenderen Schutz sollten Sie Maßnahmen auf Anwendungsebene mit einer Abwehr auf Hosting-Ebene kombinieren.
Unser Leitfaden zum DDoS-Schutz erklärt, wie sich Schutzmaßnahmen auf Netzwerk- und Anwendungsebene ergänzen.
Häufig gestellte Fragen
Ja. Nginx Open Source enthält das Modul limit_req.
Ja. Zu strenge Einstellungen können berechtigte Anfragen abweisen, insbesondere wenn sich mehrere Nutzer eine IP-Adresse teilen. Testen Sie die Konfiguration im Dry-Run-Modus, bevor Sie die Begrenzung durchsetzen.
Ja. Sie eignet sich besonders dazu, übermäßige Anfragen an API-Endpunkte und andere ressourcenintensive Anwendungsrouten zu begrenzen.
Fazit
Nginx bietet eine integrierte Ratenbegrenzung, die missbräuchlichen HTTP-Datenverkehr reduzieren kann, ohne dass zusätzliche Software erforderlich ist.
Konfigurieren Sie den Anfragegrenzwert, testen Sie ihn im Dry-Run-Modus und aktivieren Sie die Durchsetzung erst, nachdem Sie die Ergebnisse geprüft haben.
Für einen umfassenden Serverschutz sollten Sie die Ratenbegrenzung mit geeigneten vorgelagerten Maßnahmen zur DDoS-Abwehr kombinieren.