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

Detaillierte Erklärung des Sandbox-Mechanismus von Vue3

Inhaltsverzeichnis Vorwort Browser kompilierte Ve...

Implementierung der CommonJS-Modularität in Browsern ohne Kompilierung/Server

Inhaltsverzeichnis Einführung 1. Was ist one-clic...

Implementierung der VUE-Anzeige unendlicher Ebenenbaum-Datenstrukturen

Inhaltsverzeichnis Rekursiver Aufruf der Komponen...

Docker konfiguriert den Speicherort lokaler Images und Container

Verwenden Sie den Befehl „Find“, um Dateien zu fi...

Der Implementierungsprozess der Linux-Prozessnetzwerkverkehrsstatistik

Vorwort Linux verfügt über entsprechende Open-Sou...

Wissen Sie, wie viele Verbindungen ein Linux-Server verarbeiten kann?

Vorwort Sehen wir uns zunächst an, wie eine TCP-V...

Implementierung der IP-Adresskonfiguration in Centos7.5

1. Bevor Sie die IP-Adresse konfigurieren, verwen...

Eine kurze Diskussion über Shallow Copy und Deep Copy in JavaScript

Inhaltsverzeichnis 1. Direkte Zuordnung 2. Oberfl...

9 superpraktische CSS-Tipps, die Designern und Entwicklern helfen

Im Kopf eines Webdesigners muss viel Wissen im Zus...

Warum ist der MySQL-Autoinkrement-Primärschlüssel nicht kontinuierlich?

Inhaltsverzeichnis 1. Einleitung 2. Beschreibung ...

CentOS 7 erstellt Hadoop 2.10 mit hoher Verfügbarkeit (HA)

Dieser Artikel beschreibt, wie man einen hochverf...

So vergessen Sie das Root-Passwort in Mysql8.0.13 unter Windows 10

1. Stoppen Sie zuerst den MySQL-Dienst Öffnen Sie...