Voraussetzung: nginx muss über die Module ngx_http_limit_conn_module und ngx_http_limit_req_module verfügen. Mit dem Befehl 2>&1 nginx -V | tr ' ' '\n'|grep limit können Sie prüfen, ob entsprechende Module vorhanden sind. Wenn nicht, kompilieren und installieren Sie diese beiden Module neu. Testversion: Nginx Version 1.15+ Begrenzen Sie die Anzahl der Links 1. Verwenden Sie die Direktive limit_conn_zone, um den Schlüssel zu definieren und die Parameter der gemeinsam genutzten Speicherzone festzulegen (die Arbeitsprozesse verwenden diese Zone, um einen Zähler für den Schlüsselwert gemeinsam zu nutzen). Das erste Argument gibt den Ausdruck an, der als Schlüssel ausgewertet werden soll. Der zweite Parameter, Zone, gibt den Namen der Zone und ihre Größe an: Verbindungslimitzone $binary_remote_addr Zone=Adresse:10m; 2. Verwenden Sie die Direktive limit_conn im Kontext location {} , server {} oder http {} , um das Limit anzuwenden. Das erste Argument ist der oben festgelegte Name der gemeinsam genutzten Speicherzone und das zweite Argument ist die Anzahl der für jeden Schlüssel zulässigen Verbindungen: Standort /download/ { limit_conn Adresse 1; } Wenn Sie die Variable $binary_remote_addr als Parameter verwenden, basiert die Einschränkung auf der IP-Adresse. Sie können auch die Variable $server_name verwenden, um die Anzahl der Verbindungen zu einem bestimmten Server zu begrenzen: http { limit_conn_zone $server_name zone=Server:10m; Server { limit_conn-Server 1000; } } Begrenzung der Anforderungsrate Mithilfe der Ratenbegrenzung können Sie DDoS- und CC-Angriffe verhindern oder vermeiden, dass ein Upstream-Server durch zu viele gleichzeitige Anfragen überlastet wird. Diese Methode basiert auf dem Leaky-Bucket-Algorithmus, bei dem Anfragen mit unterschiedlicher Geschwindigkeit im Bucket eintreffen und ihn mit einer festen Geschwindigkeit verlassen. Bevor Sie die Ratenbegrenzung verwenden, müssen Sie die globalen Parameter des „Leaky Bucket“ konfigurieren:
Diese Parameter werden mit der Direktive „limit_req_zone“ festgelegt. Diese Direktive wird auf http{}-Ebene definiert - dieser Ansatz ermöglicht die Anwendung verschiedener Zonen und Anforderungsüberlaufparameter auf unterschiedliche Kontexte: http { #... limit_req_zone $binary_remote_addr Zone=eins:10m Rate=1r/s; } Mit dieser Konfiguration wird eine gemeinsam genutzte Speicherzone mit dem Namen „One“ und einer Größe von 10 MB erstellt. Dieser Bereich enthält den Status der Client-IP-Adresse, die mit der Variable $binary_remote_addr festgelegt wurde. Beachten Sie, dass $remote_addr auch die IP-Adresse des Clients enthält, während $binary_remote_addr die kürzere Binärdarstellung der IP-Adresse enthält. Die optimale Größe des gemeinsam genutzten Speicherbereichs kann mithilfe der folgenden Daten berechnet werden: $binary_remote_addr Die Wertgröße einer IPv4-Adresse beträgt 4 Bytes, und der Speicherzustand auf 64-Bit-Plattformen belegt 128 Bytes. Daher belegen die Statusinformationen für ungefähr 16.000 IP-Adressen 1 MB dieses Bereichs. Wenn der Speicherplatz erschöpft ist, wenn NGINX einen neuen Eintrag hinzufügen muss, wird der älteste Eintrag gelöscht. Wenn der freigegebene Speicherplatz immer noch nicht ausreicht, um den neuen Datensatz aufzunehmen, gibt NGINX den Statuscode 503 „Service Unavailable“ zurück, der mit der Direktive „limit_req_status“ neu definiert werden kann. Sobald diese Zone festgelegt ist, können Sie die Anforderungsrate mit der Direktive „limit_req“ überall in der NGINX-Konfiguration begrenzen, insbesondere in den Kontexten „server {}“, „location {}“ und „http {}“: http { #... limit_req_zone $binary_remote_addr Zone=eins:10m Rate=1r/s; Server { #... Standort /Suche/ { limit_req Zone=eins; } } } Mit der obigen Konfiguration verarbeitet nginx unter der Route /search/ nicht mehr als 1 Anfrage pro Sekunde und verzögert diese Anfragen so, dass die Gesamtrate nicht höher als die festgelegte Rate ist. NGINX verzögert die Verarbeitung solcher Anfragen, bis der „Bucket“ (gemeinsam genutzter Bucket 1) voll ist. Bei Anfragen, die den vollen Bucket erreichen, antwortet NGINX mit einem 503-Dienst nicht verfügbar-Fehler (wenn limit_req_status keinen benutzerdefinierten Statuscode festlegt). Bandbreite begrenzen Um die Bandbreite pro Verbindung zu begrenzen, verwenden Sie die Direktive „limit_rate“: Standort /download/ { Grenzrate 50k; } Mit dieser Konfiguration können Clients Inhalte mit Geschwindigkeiten von bis zu 50 k/s über eine einzige Verbindung herunterladen. Ein Client kann jedoch mehrere Verbindungen öffnen, um diese Beschränkung zu umgehen. Wenn das Ziel darin besteht, Downloadgeschwindigkeiten über einem bestimmten Wert zu verhindern, sollte daher auch die Anzahl der Verbindungen begrenzt werden. Beispielsweise eine Verbindung pro IP-Adresse (bei Verwendung der oben angegebenen gemeinsam genutzten Speicherzone): Standort /download/ { limit_conn Adresse 1; Grenzrate 50k; } Um Beschränkungen erst festzulegen, nachdem der Client eine bestimmte Datenmenge heruntergeladen hat, verwenden Sie die Direktive „limit_rate_after“. Es kann sinnvoll sein, dem Client das schnelle Herunterladen einer bestimmten Datenmenge (z. B. des Dateikopfs – des Filmindex) zu gestatten und die Downloadrate der restlichen Daten zu begrenzen (so dass der Benutzer den Film ansehen kann, anstatt ihn herunterzuladen). Grenzrate nach 500.000; Grenzrate 20k; Das folgende Beispiel zeigt eine kombinierte Konfiguration zur Begrenzung der Verbindungsanzahl und Bandbreite. Die maximal zulässige Anzahl von Verbindungen ist auf 5 Verbindungen pro Clientadresse festgelegt, was für die meisten gängigen Fälle geeignet ist, da moderne Browser normalerweise maximal 3 Verbindungen gleichzeitig geöffnet haben. Außerdem ist nur eine Verbindung zu dem Ort erlaubt, an dem der Download bereitgestellt wird: http { limit_conn_zone $binary_remote_address zone=Adresse:10m Server { Stammverzeichnis /www/data; limit_conn Adresse 5; Standort / { } Standort /download/ { limit_conn Adresse 1; Grenzrate nach 1 Min.; Grenzrate 50k; } } } Der Inhalt wird aus dem Teil des Dokuments zur Nginx-Anforderungsbeschränkung übersetzt, mit einer leichten Anpassung der Semantik. 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:
|
<<: Eine kurze Diskussion über die Typen von node.js-Middleware
Mysql mehrere unabhängige Tabellen Abfragedaten u...
In diesem Artikel finden Sie eine ausführliche An...
Wir schreiben bereits das Jahr 2020. Hungrige Men...
Als Backend-Programmierer haben Sie an vielen Ste...
Seitendomänenbeziehung: Die Hauptseite a.html gehö...
Fall 1: Letzte Übermittlung und kein Push Führen ...
Viele Webdesigner sind beim Entwurf des Webseitenl...
Verstehe das Vielleicht haben Sie this in anderen...
Hyperlink Hyperlinks sind die am häufigsten verwen...
Als Verwaltungszentrale und Server dient dabei un...
<br />Verwandte Artikel: Web-Kenntnisse: Lös...
Ich habe online nach vielen Möglichkeiten gesucht...
Drei Möglichkeiten, CSS einzuführen 1. Inline-Sti...
1. Installieren Sie mutt sudo apt-get install mut...
In diesem Artikel erfahren Sie, wie Sie das kompr...