Die aktuellen Einschränkungen von Nginx in einem Artikel verstehen (einfache Implementierung)

Die aktuellen Einschränkungen von Nginx in einem Artikel verstehen (einfache Implementierung)

Nginx ist mittlerweile einer der beliebtesten Load Balancer. Angesichts des rasanten Anstiegs des Internetverkehrs ist eine Begrenzung des Schnittstellenstroms ebenfalls sehr wichtig, insbesondere in Szenarien mit hoher Parallelität. Nginx bietet zwei Möglichkeiten, den Datenfluss zu begrenzen: Begrenzung der Zugriffshäufigkeit und Begrenzung der Anzahl gleichzeitiger Verbindungen.

Die Ratenbegrenzung ist eine der nützlichsten Funktionen von NGINX, sie wird jedoch auch am häufigsten missverstanden und falsch konfiguriert. Mit dieser Funktion können Sie die Anzahl der HTTP-Anfragen begrenzen, die ein Benutzer in einem bestimmten Zeitraum stellen kann. Die Anfrage kann so einfach sein wie eine GET-Anfrage für eine Homepage oder eine POST-Anfrage für ein Anmeldeformular.
Die Ratenbegrenzung kann auch zu Sicherheitszwecken eingesetzt werden, etwa um Brute-Force-Angriffe zum Knacken von Passwörtern zu verlangsamen. Hilft beim Schutz vor DDoS-Angriffen, indem die Rate eingehender Anfragen begrenzt und (in Kombination mit Protokollierung) Ziel-URLs markiert werden. Im Allgemeinen dient die Strombegrenzung dazu, vorgelagerte Anwendungsserver vor einer Überlastung durch eine große Anzahl gleichzeitiger Benutzeranforderungen zu schützen.

So funktioniert die Ratenbegrenzung bei NGINX

Die Drosselung von NGINX verwendet den Leaky-Bucket-Algorithmus, der in der Kommunikation und in paketvermittelten Computernetzwerken häufig verwendet wird, um Bursts bei begrenzter Bandbreite zu bewältigen. Es ist ganz ähnlich wie bei einem Eimer, der sich von oben mit Wasser füllt und unten ausläuft. Wenn die Geschwindigkeit, mit der das Wasser einfließt, größer ist als die Geschwindigkeit, mit der das Wasser austritt, läuft der Eimer über.

Im Anforderungsverarbeitungsprozess stellt „Wasser“ Anforderungen vom Client dar und der „Bucket“ stellt eine Warteschlange dar, in der Anforderungen darauf warten, gemäß dem First-In-First-Out-Algorithmus (FIFO) verarbeitet zu werden. Auslaufendes Wasser steht für Anfragen, die den Puffer verlassen und vom Server verarbeitet werden, und Überlauf steht für Anfragen, die gelöscht und nie bearbeitet werden.

1. Zugriffshäufigkeit begrenzen (normaler Verkehr)

In Nginx verwenden wir das Modul ngx_http_limit_req_module, um die Zugriffshäufigkeit von Anfragen zu begrenzen, basierend auf dem Prinzip des Leaky-Bucket-Algorithmus. Als Nächstes verwenden wir die nginx-Anweisungen limit_req_zone und limit_req, um die Anforderungsverarbeitungsrate einer einzelnen IP zu begrenzen.

Syntax: limit_req_zone key zone rate

  • Schlüssel: definiert das aktuelle Begrenzungsobjekt. binary_remote_addr ist ein Schlüssel, der die aktuelle Begrenzung basierend auf remote_addr (Client-IP) bedeutet. Der Zweck von binary_ besteht darin, die Speichernutzung zu komprimieren.
  • Zone: Definiert eine gemeinsam genutzte Speicherzone zum Speichern von Zugriffsinformationen. myRateLimit:10m gibt einen Speicherbereich mit einer Größe von 10 M und dem Namen myRateLimit an. 1 MB kann Zugriffsinformationen von 16.000 IP-Adressen speichern, und 10 MB können Zugriffsinformationen von 16W IP-Adressen speichern.
  • Mit rate wird die maximale Zugriffsrate eingestellt. rate=10r/s bedeutet, dass maximal 10 Anfragen pro Sekunde verarbeitet werden. Nginx verfolgt Anforderungsinformationen tatsächlich mit einer Genauigkeit von Millisekunden, sodass 10 U/s tatsächlich eine Grenze darstellen: Alle 100 Millisekunden wird eine Anforderung verarbeitet. Dies bedeutet, dass eine weitere Anfrage, die innerhalb von 100 Millisekunden nach der Verarbeitung der vorherigen Anfrage eingeht, abgelehnt wird.

2. Zugriffshäufigkeit begrenzen (Burst-Verkehr)

Wenn der Datenverkehr gemäß der obigen Konfiguration plötzlich zunimmt, werden die überzähligen Anfragen abgelehnt und der Burst-Datenverkehr kann nicht verarbeitet werden. Wie geht man also mit dem Burst-Datenverkehr um? Nginx bietet den Burst-Parameter, um das Problem des Burst-Verkehrs zu lösen, und wird in Verbindung mit dem Nodelay-Parameter verwendet. Burst bezeichnet die Anzahl zusätzlicher Anfragen, die nach Überschreiten der festgelegten Verarbeitungsrate verarbeitet werden können.

Burst=20 Nodelay bedeutet, dass diese 20 Anfragen sofort und ohne Verzögerung verarbeitet werden, was einer Sonderbehandlung von Sonderangelegenheiten entspricht. Selbst wenn diese 20 Burst-Anfragen sofort verarbeitet werden, werden nachfolgende Anfragen jedoch nicht sofort verarbeitet. Burst = 20 entspricht dem Belegen von 20 Slots in der Cache-Warteschlange. Selbst wenn die Anforderung verarbeitet wird, können diese 20 Slots nur alle 100 ms einzeln freigegeben werden. Dadurch wird eine stabile Rate erreicht, gleichzeitig können plötzliche Verkehrsströme aber auch normal bewältigt werden.

3. Begrenzen Sie die Anzahl gleichzeitiger Verbindungen

Das Modul ngx_http_limit_conn_module von Nginx bietet die Funktion, die Anzahl der Ressourcenverbindungen zu begrenzen. Dies kann mit den Anweisungen limit_conn_zone und limit_conn erfolgen.

limit_conn perip 20: Der entsprechende Schlüssel ist $binary_remote_addr, was bedeutet, dass eine einzelne IP auf maximal 20 Verbindungen gleichzeitig beschränkt ist. limit_conn perserver 100: Der entsprechende Schlüssel ist $server_name, der die Gesamtzahl der gleichzeitigen Verbindungen angibt, die der virtuelle Host (Server) gleichzeitig verarbeiten kann. Beachten Sie, dass die Verbindung erst gezählt wird, nachdem der Anforderungsheader vom Backend-Server verarbeitet wurde.

Okay, sind Ihnen die oben genannten Methoden zur Strombegrenzung klar?

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:
  • Nginx-Limit-Methode zum Beschränken des Zugriffs auf Module
  • So implementieren Sie eine verteilte Strombegrenzung mit Nginx
  • Eine vollständige Analyse verschiedener Situationen, in denen der Nginx-Server den IP-Zugriff einschränkt
  • Nginx begrenzt die Anzahl der Besuche und Anfragen an eine bestimmte IP im gleichen Zeitraum. Beispielcode
  • Detaillierte Erläuterung der Verbindungslimitkonfiguration von Nginx für IP-Adressen in einem Netzwerksegment
  • Beispiel für das Festlegen der limit_req-Ratenbegrenzung in nginx
  • So verwenden Sie limit_req_zone in Nginx, um den Zugriff auf dieselbe IP zu beschränken

<<:  So verwenden Sie JS zum Parsen des Excel-Inhalts in der Zwischenablage

>>:  Installations-Tutorial zur dekomprimierten Version von MySQL5.7.21 unter Win10

Artikel empfehlen

MySQL-Datenbankbeschränkungen und Prinzipien des Datentabellenentwurfs

Inhaltsverzeichnis 1. Datenbankbeschränkungen 1.1...

So ändern Sie in Nginx die über http aufgerufene Website in https

Inhaltsverzeichnis 1. Hintergrund 2. Voraussetzun...

Der Vue.js-Cloud-Speicher realisiert die Bild-Upload-Funktion

Vorwort Tipp: Das Folgende ist der Hauptinhalt di...

So implementieren Sie den Selbststart eines Docker-Containers

Container-Autostart Docker bietet einen Neustartr...

DHTML-Objekte (gemeinsame Eigenschaften verschiedener HTML-Objekte)

!DOCTYPE Gibt die Document Type Definition (DTD) ...

Detaillierte Erläuterung der Anwendungsszenarien von Filtern in Vue

filter werden im Allgemeinen verwendet, um bestim...

Reines js, um einen Schreibmaschineneffekt zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

SQL Get gespeicherte Prozedur gibt Datenprozessanalyse zurück

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

Reines CSS3 zum Erstellen eines Beispielcodes für Haushühner

Ich habe in letzter Zeit viel Wissen und Artikel ...

Detailliertes Tutorial zur Installation der MySQL 8.0.20-Datenbank auf CentOS 7

Weiterführende Literatur: MySQL8.0.20-Installatio...