So begrenzen Sie die Zugriffshäufigkeit, die Downloadrate und die Anzahl gleichzeitiger Verbindungen in Nginx

So begrenzen Sie die Zugriffshäufigkeit, die Downloadrate und die Anzahl gleichzeitiger Verbindungen in Nginx

1. Übersicht über Module und Anweisungen zur Begrenzung der Zugriffshäufigkeit, gleichzeitiger Verbindungen und Downloadgeschwindigkeit

  • ngx_http_limit_req_module: Wird verwendet, um die Anzahl der Anforderungen pro Zeiteinheit zu begrenzen, d. h. die Ratenbegrenzung unter Verwendung des Leaky-Bucket-Algorithmus "Leaky Bucket".
  • ngx_http_limit_conn_module: Wird verwendet, um die Anzahl der gleichzeitigen Verbindungen zu begrenzen, d. h. die Parallelitätsbegrenzung
  • limit_rate und limit_rate_after: Einstellungen für die Downloadgeschwindigkeit

Leaky-Bucket-Algorithmus

Die Idee des Algorithmus ist:

  • Wasser (Anforderung) wird von oben in den Eimer gegossen und fließt von unten aus dem Eimer heraus (zur Verarbeitung)
  • Das Wasser, das nicht rechtzeitig abfließen kann, wird im Eimer (Puffer) gespeichert und fließt mit einer festen Geschwindigkeit ab;
  • Wenn der Eimer voll ist, läuft das Wasser über (wird weggeschüttet).
  • Der Kern dieses Algorithmus besteht darin, Anfragen zwischenzuspeichern, mit gleichmäßiger Geschwindigkeit zu verarbeiten und redundante Anfragen direkt zu verwerfen.
  • Das Anforderungsratenbegrenzungsmodul von Nginx verwendet einen Leaky-Bucket-Algorithmus, der zwangsweise sicherstellen kann, dass die Echtzeit-Verarbeitungsgeschwindigkeit von Anforderungen den festgelegten Schwellenwert nicht überschreitet.

2. Begrenzen Sie die Häufigkeit von URL-Zugriffsanfragen

http{ 
    ... 
 
  limit_req_zone $binary_remote_addr Zone=eins:30m Rate=20r/s; 
  limit_req_zone $binary_remote_addr $uri Zone=zwei:30m Rate=20r/s; 
  limit_req_zone $binary_remote_addr $request_uri Zone=drei:30m Rate=20r/s; 
  Grenzwert_Anforderungsstatus 444; 
    ... 
 
  Server{ 
      ... 
 
    limit_req Zone=zwei Burst=15 Knotenlage; 
    ... 
 
  } 
} 

erklären:

limit_req_zone $binary_remote_addr Zone=eins:30m Rate=20r/s;

  • $binary_remote_addr dient zur Beschränkung der gleichen Client-IP-Adresse auf verschiedene URLs
  • Zone: Zonenname eine speichert Sitzung 30M
  • Rate: Anzahl der Anfragen pro Sekunde

limit_req_zone $binary_remote_addr $uri Zone=zwei:30m Rate=20r/s;

  • $binary_remote_addr $uri dient dazu, dieselbe Client-IP-Adresse auf dieselbe URL zu beschränken
  • Zone: Zonenname zwei Geschäfte Sitzung 30M
  • Rate: Anzahl der Anfragen pro Sekunde

limit_req_zone $binary_remote_addr $request_uri Zone=drei:30m Rate=20r/s;

  • $binary_remote_addr $request_uri dient dazu, dieselbe Client-IP-Adresse auf dieselbe URL zu beschränken
  • Zone: Zonenname zwei Geschäfte Sitzung 30M
  • Rate: Anzahl der Anfragen pro Sekunde

limit_req Zone=zwei Burst=15 Knotenlage;

  • Zonenbezugsfläche ist zwei,
  • Burst legt einen Puffer der Größe 15 fest. Wenn eine große Anzahl von Anfragen (Bursts) eingehen, überschreitet der Zugriff die oben genannte Grenze und kann zuerst im Puffer platziert werden.
  • Nodelay wird normalerweise zusammen mit Burst verwendet. Wenn Nodelay gesetzt ist, wird direkt 503 zurückgegeben, wenn der Zugriff die Frequenz überschreitet und der Puffer voll ist. Wenn es gesetzt ist, warten alle großen Anfragen in der Warteschlange.

3. Gleichzeitiges Verbindungslimit

Fall 1:

http { 
  ... 
 
  limit_conn_log_level-Fehler; 
  Verbindungslimitzone $binary_remote_addr Zone=Adresse:10m; 
  Verbindungsstatuslimit 503; 
 
  ... 
 
  Server { 
 
    ... 
 
    Standort /download/ { 
      limit_conn addr 1; die einzelne Client-IP ist auf 1 begrenzt 
    } 
    ... 
 
} 

Fall 2:

http{ 
Verbindungslimitzone $binary_remote_addr zone=perip:10m; 
limit_conn_zone $server_name zone=perserver:10m; 
 
  Server { 
    ... 
    limit_conn perip 10; #Anzahl der Verbindungen zwischen einer einzelnen Client-IP und dem Server limit_conn perserver 100; #Begrenzung der Gesamtanzahl der Verbindungen zum Server} 
} 

4. Begrenzen Sie die Download-Geschwindigkeit

Standort /Download { 
  Grenzrate 128k; 
 } 
 
#Wenn Sie möchten, dass der Benutzer die ersten 10 m der Datei ohne Geschwindigkeitsbegrenzung herunterlädt und die Geschwindigkeit nach Überschreiten von 10 m auf 128 kb/s begrenzt, können Sie den folgenden Inhaltsort hinzufügen: /download { 
    Grenzrate nach 10 Min.; 
    Grenzrate 128k; 
 } 

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Ändern Sie die Nginx-Konfiguration, um die Häufigkeit bösartiger Crawler zu begrenzen
  • Tutorial zur Begrenzung der Zugriffshäufigkeit pro Zeiteinheit in Nginx
  • Nginx-Konfigurationsbeispiel zur Begrenzung der Suchmaschinen-Crawler-Frequenz und zum Verbot der Blockierung von Webcrawlern

<<:  Detaillierte Erklärung: Die MySQL-Ausführungsplan-ID ist leer (Schlüsselwort UNION).

>>:  So verwenden Sie die asynchrone Anforderungs-API von Axios in Vue

Artikel empfehlen

Einige Details zu Semikolons in JavaScript

Vorwort Semikolons sind in JavaScript optional un...

Eine vollständige Liste häufig verwendeter HTML-Tags und ihrer Eigenschaften

Zunächst müssen Sie einige Eigenschaften von HTML...

Setzen Sie den Eingang auf schreibgeschützt über deaktiviert und schreibgeschützt

Es gibt zwei Möglichkeiten, schreibgeschützte Eing...

So erstellen Sie schnell ELK basierend auf Docker

[Zusammenfassung] Dieser Artikel erstellt schnell...

Detaillierte Schritte zum Konfigurieren von my.ini für mysql5.7 und höher

Im entpackten Paket von Windows 64-Bit MySQL 5.7 ...

So lösen Sie das jQuery-Konfliktproblem

In der Frontend-Entwicklung ist $ eine Funktion i...

So verwenden Sie vw+rem für das mobile Layout

Verwenden Sie immer noch das flexible Rem-Layout?...

HTML-Auszeichnungssprache - Formular

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Entwerfen Sie einen Datensammler mit Vue

Inhaltsverzeichnis Szenario Kernthemen Statusüber...

So deinstallieren Sie Node und NPM vollständig auf dem Mac

npm deinstallieren sudo npm deinstallieren npm -g...

So konfigurieren Sie die PDFLatex-Umgebung in Docker

Technischer Hintergrund Latex ist ein unverzichtb...