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

js, um den Effekt eines Lichtschalters zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

So installieren Sie die grafische Benutzeroberfläche unter Linux

1. Linux-Installation (Root-Benutzerbetrieb) 1. I...

Eine detaillierte Einführung in die Verwendung von Blockkommentaren in HTML

Allgemeine Kommentare in HTML: <!--XXXXXXXX--&g...

Die Bedeutung des Statuscodes im HTTP-Protokoll

Ein Statuscode, der eine vorläufige Antwort anzei...

Detaillierte Erklärung des Middleman-Modus von Angular-Komponenten

Inhaltsverzeichnis 1. Mittelsmann-Modell 2. Beisp...

Beispiel für die Bereitstellung von MySQL 8.0 mit Docker

1. Informationen zur Installation von Docker find...

Schritte zur Annotation von Metadeklarationen

Schritte zur Annotation von Metadeklarationen: 1. ...

Analyse des Prinzips der MySQL-Indexlängenbeschränkung

Dieser Artikel stellt hauptsächlich die Analyse d...

Erfahren Sie mehr über den Hyperlink A-Tag

fragen: Ich habe den Hyperlink mit CSS formatiert...

Detaillierte Erläuterung des MySQL-Clusterindex und des Nicht-Clusterindex

1. Clustered-Index Tabellendaten werden in der Re...

Exquisiter Snake-Implementierungsprozess in JavaScript

Inhaltsverzeichnis 1. HTML-Struktur erstellen 2. ...

Details zur Überwachung von DOM-Elementen durch MutationObServer in JavaScript

1. Grundlegende Verwendung Es kann über den Mutat...