Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

So konfigurieren Sie die Nginx-Ratenbegrenzung unter Ubuntu

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.

So konfigurieren Sie die Nginx-Ratenbegrenzung

Voraussetzungen

Sie benötigen einen Ubuntu-Server mit installiertem Nginx, SSH-Zugriff mit sudo-Berechtigungen und eine bestehende Website oder Anwendung.

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.

Häufig gestellte Fragen

Ist die Nginx-Ratenbegrenzung kostenlos?

Ja. Nginx Open Source enthält das Modul limit_req.

Kann die Nginx-Ratenbegrenzung berechtigte Besucher blockieren?

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.

Funktioniert die Nginx-Ratenbegrenzung auch für APIs?

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.

Table of Content

Ein Nginx-Reverse-Proxy empfängt Anfragen von Website-Besuchern und leitet sie an einen anderen Server oder eine

Ein 502-Bad-Gateway-Fehler in Nginx bedeutet in der Regel, dass Nginx keine gültige Antwort von einem

Ein 504-Gateway-Timeout-Fehler tritt auf, wenn ein Server, der als Gateway oder Proxy fungiert, nicht rechtzeitig

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Nach oben scrollen