Heim >Betrieb und Instandhaltung >Nginx >So implementieren Sie eine verteilte Strombegrenzung mit Nginx

So implementieren Sie eine verteilte Strombegrenzung mit Nginx

WBOY
WBOYnach vorne
2023-05-13 12:07:141233Durchsuche

1. Einführung

Im Allgemeinen erhalten Systeme, die der Außenwelt ausgesetzt sind, während Werbeaktionen oder Hackerangriffen eine große Anzahl von Anfragen. Um das System vor einer Überlastung durch den hohen gleichzeitigen Datenverkehr zu schützen, ist dies erforderlich um den Fluss zu begrenzen.

2. Stellen Sie zunächst ein Programm bereit, das die Schnittstelle der Außenwelt zugänglich macht Stellt eine Get-Anfrage bereit, die eine erholsame Schnittstelle von „Hallo Welt“ zurückgibt. Ich werde nicht näher auf die Bereitstellungsschritte eingehen. Sie können es selbst mit Baidu Spring Boot bereitstellen Ich empfehle jedem eine Architektur-Lern- und Austauschgruppe. Nummer der Kommunikations- und Lerngruppe: 575745314. Es werden einige von erfahrenen Architekten aufgezeichnete Videos geteilt: Spring, Mybatis, Netty-Quellcode-Analyse, Prinzipien hoher Parallelität, hohe Leistung, verteilt, Microservice-Architektur, JVM-Leistungsoptimierung, verteilte Architektur usw. Diese sind zu einem notwendigen Wissenssystem für Architekten geworden. Sie können auch kostenlose Lernressourcen erhalten und haben bisher viel davon profitiert

3. Erstellen Sie eine Nginx-Konfigurationsdatei mit dem Namen nginx.conf folgtSo implementieren Sie eine verteilte Strombegrenzung mit Nginx

Erklärung des aktuellen limitierenden Teils in der Konfigurationsdatei:

Wie oben hat die aktuelle limitierende Konfiguration von Nginx nur zwei Codezeilen

So implementieren Sie eine verteilte Strombegrenzung mit NginxDie erste Zeile:

limit_req_zone : ist die aktuelle Begrenzungsanweisung.

$binary_remote_addr: Dies bedeutet, dass die aktuelle Begrenzungskonfiguration auf der Grundlage der Client-IP begrenzt wird, wenn Sie sich zweimal wie ein Schurke verhalten pro Sekunde wird der Strom begrenzt und ein http 503-Fehler wird an Sie zurückgegeben.

So implementieren Sie eine verteilte Strombegrenzung mit Nginxzone=perip: bedeutet, dass der Name perip verwendet wird, um diese Zeile der Strombegrenzungskonfiguration zu identifizieren der Name perip (das heißt, die aktuelle Grenzkonfiguration kann als mehrfach definiert werden)

10 m: Zeigt an, dass der Speicherplatz für die Client-IP 10 MB beträgt und ungefähr mehr als 10.000 IPs speichert IPs. Referenzerklärung: ... Suchen Sie in diesem Artikel nach Binary_remote_addr, um entsprechende Erklärungen zu finden.

rate=1r/s: Zeigt an, dass die Häufigkeit eine Anfrage pro Sekunde beträgt Cluster, verwenden Sie die aktuelle einschränkende Konfiguration mit dem Namen perip

4. Verwenden Sie Docker, um nginx bereitzustellen

Kopieren Sie die im vorherigen Schritt erstellte Konfigurationsdatei nginx.conf in das Linux-Verzeichnis unter /root/nginx/ (das Verzeichnis kann sein (beliebig) und verwenden Sie dann einen Docker-Befehl, um die Nginx-Umgebung bereitzustellen. Der 8080-Port wird hier verfügbar gemacht. Auf den Lastausgleichsknoten in der Nginx-Konfiguration kann über Port 8080, also 192.168.10.253:8090, zugegriffen werden IP-Port. Dieser IP-Port entspricht dem im ersten Schritt erstellten und bereitgestellten Hallo-Welt-Programm. So implementieren Sie eine verteilte Strombegrenzung mit Nginx

Verwenden Sie Code, um auf die im ersten Schritt definierte Hallowelt-Schnittstelle zuzugreifen. Ich führe hier 10 Get-Anfragen pro Sekunde aus ist bereits größer als die in Nginx konfigurierte Rate = 1r/s, um einmal pro Sekunde anzufordern, sodass Sie einen 503-Fehler wie folgt sehen.

Wenn Sie den Code ändern und die Get-Anfrage einmal pro Sekunde ausführen, nein Fehler wird gemeldet. Sie können es ausprobieren

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine verteilte Strombegrenzung mit Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen