Die Belastung wird im Allgemeinen während des Systemdesigns geschätzt. Wenn das System dem öffentlichen Netzwerk ausgesetzt ist, können böswillige Angriffe oder normaler Burst-Verkehr dazu führen, dass das System überlastet wird. Die Strombegrenzung ist eine der Schutzmaßnahmen. Die Strombegrenzung dient zur Steuerung des Flusses. In diesem Artikel werden zwei Strombegrenzungseinstellungen von Nginx aufgezeichnet. „Aktuelle Einschränkung“ im Leben? Strombegrenzung ist nichts Neues und in unserem täglichen Leben allgegenwärtig. Hier einige Beispiele: Museen: Begrenzung der Besucherzahl pro Tag zum Schutz kultureller Relikte Sicherheitskontrolle im Hochgeschwindigkeitszug: Es gibt mehrere Sicherheitskontrollen. Die Passagiere stellen sich der Reihe nach an und das Personal entscheidet anhand der Geschwindigkeit der Sicherheitskontrolle, ob Personen eingelassen werden. Während der Ferien können Sie Sicherheitskontrollpunkte hinzufügen, um die Verarbeitungskapazität zu verbessern (horizontale Erweiterung) und gleichzeitig die Länge des Wartebereichs zu erhöhen (Zwischenspeichern ausstehender Aufgaben). Zur Abwicklung von Bankgeschäften gilt: Jeder muss zunächst eine Nummer erhalten und jedes Schalterbüro ruft diese Nummer zur Bearbeitung auf. Die Bearbeitungsgeschwindigkeit der einzelnen Schalter hängt vom jeweiligen Geschäft des Kunden ab. Jeder muss sich lediglich anstellen und warten, bis seine Nummer aufgerufen wird. Wenn es fast Zeit ist, Feierabend zu machen, sagen Sie dem Kunden, dass er morgen wiederkommen soll (lehnen Sie den Verkehr ab). Staudamm-Abfluss: Staudämme können durch Schleusen die Abflussrate (die Verarbeitungsgeschwindigkeit) regeln. Die oben genannten Beispiele zur „Strombegrenzung“ ermöglichen es den Dienstanbietern, ihren Kunden einen stabilen Dienst bereitzustellen. Nginx-Ratenbegrenzung Nginx bietet zwei Methoden zur Strombegrenzung: Eine dient zur Steuerung der Rate und die andere zur Steuerung der Anzahl gleichzeitiger Verbindungen. Kontrollrate Normale Strombegrenzung Das Modul ngx_http_limit_req_module bietet die Möglichkeit, die Anforderungsverarbeitungsrate mithilfe des Leaky-Bucket-Algorithmus zu begrenzen. Das folgende Beispiel verwendet die nginx-Direktiven „limit_req_zone“ und „limit_req“, um die Anforderungsverarbeitungsrate einer einzelnen IP zu begrenzen. Fügen Sie in nginx.conf http eine aktuelle Begrenzungskonfiguration hinzu:
http { limit_req_zone $binary_remote_addr Zone=myRateLimit:10m Rate=10r/s; } Konfigurieren Sie den Server so, dass er mit der Direktive „limit_req“ eine Strombegrenzung anwendet. Server { Standort / { limit_req zone=meinRatenlimit; Proxy-Passwort http://mein_Upstream; } } 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. Umgang mit Datenverkehrsspitzen Das obige Beispiel begrenzt die Rate auf 10r/s. Wenn der normale Verkehr plötzlich zunimmt, werden die Anfragen, die den Grenzwert überschreiten, abgelehnt und der Burst-Verkehr kann nicht verarbeitet werden. Dieses Problem kann durch Kombinieren des Burst-Parameters gelöst werden. Server { Standort / { limit_req Zone=myRateLimit Burst=20; Proxy-Passwort http://mein_Upstream; } } Burst bezeichnet die Anzahl zusätzlicher Anfragen, die nach Überschreiten der festgelegten Verarbeitungsrate verarbeitet werden können. Bei einer Rate von 10 U/s wird 1 Sekunde in 10 Teile unterteilt, d. h. alle 100 ms kann 1 Anforderung verarbeitet werden. Hier gilt **burst=20 **. Wenn 21 Anfragen gleichzeitig eintreffen, verarbeitet Nginx die erste Anfrage, stellt die restlichen 20 Anfragen in die Warteschlange und nimmt dann alle 100 ms eine Anfrage zur Verarbeitung aus der Warteschlange. Wenn die Anzahl der Anfragen größer als 21 ist, lehnt der Server die Verarbeitung der zusätzlichen Anfragen ab und gibt 503 zurück. Allerdings ist es nicht praktikabel, nur den Burst-Parameter zu verwenden. Angenommen, Burst = 50 und die Rate beträgt immer noch 10 U/s. Obwohl 50 Anfragen in der Warteschlange alle 100 ms verarbeitet werden, muss die 50. Anfrage 50 x 100 ms oder 5 s warten. Eine so lange Verarbeitungszeit ist natürlich inakzeptabel. Daher wird Burst häufig in Verbindung mit Nodelay verwendet. Server { Standort / { limit_req Zone=myRateLimit Burst=20 Knotenlay; Proxy-Passwort http://mein_Upstream; } } nodelay steht für den Burst-Parameter. burst=20 nodelay bedeutet, dass diese 20 Anfragen sofort und ohne Verzögerung verarbeitet werden, was einer Sonderbehandlung von Sonderfällen 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. Begrenzen Sie die Anzahl der Verbindungen Das ngx_http_limit_conn_module bietet die Möglichkeit, die Anzahl der Verbindungen mit den Anweisungen limit_conn_zone und limit_conn zu begrenzen. Das Folgende ist ein offizielles Beispiel für Nginx: Verbindungslimitzone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; Server { ... limit_conn perip 10; Verbindungslimit für Server 100; } limit_conn perip 10 verwendet den Schlüssel $binary_remote_addr, was bedeutet, dass eine einzelne IP auf maximal 10 Verbindungen gleichzeitig beschränkt ist. limit_conn perserver 100 Der Schlüssel ist $server_name, der die Gesamtzahl der gleichzeitigen Verbindungen angibt, die der virtuelle Host (Server) gleichzeitig verarbeiten kann. Es ist zu beachten, dass die Verbindung erst gezählt wird, nachdem der Anforderungsheader vom Backend-Server verarbeitet wurde. Einrichten einer Whitelist Die Strombegrenzung gilt hauptsächlich für den externen Zugriff. Der Intranet-Zugriff ist relativ sicher und erfordert keine Strombegrenzung. Sie können einfach eine Whitelist einrichten. Dies kann mithilfe der beiden Nginx-Toolmodule ngx_http_geo_module und ngx_http_map_module erfolgen. Konfigurieren Sie die Whitelist im http-Abschnitt von nginx.conf: geo $limit { Standardwert 1; 10.0.0.0/8 0; 192.168.0.0/24 0; 172.20.0.35 0; } Karte $limit $limit_key { 0 ""; 1 $binäre_Remote_Adresse; } limit_req_zone $limit_key Zone=myRateLimit:10m Rate=10r/s; Geo gibt 0 für Whitelist-IPs (entweder Subnetze oder IPs) und 1 für andere IPs zurück. map konvertiert limit in limit_key. Wenn $limit 0 (Whitelist) ist, wird eine leere Zeichenfolge zurückgegeben; wenn es 1 ist, wird die tatsächliche IP-Adresse des Clients zurückgegeben. Der Strombegrenzungsschlüssel limit_req_zone wird nicht mehr verwendet Weiterführende Literatur Zusätzlich zur Strombegrenzung bietet ngx_http_core_module auch die Möglichkeit, die Datenübertragungsgeschwindigkeit (allgemein als Downloadgeschwindigkeit bekannt) zu begrenzen. Zum Beispiel: Standort /flv/ { flv; Grenzrate nach 20 Min.; Grenzrate 100k; } Diese Begrenzung gilt für jede einzelne Anfrage, was bedeutet, dass die Geschwindigkeit des Clients beim Herunterladen der ersten 20 M nicht beschränkt ist und die nachfolgende Begrenzung bei 100 kb/s liegt. Die obige kurze Diskussion über die beiden Strombegrenzungsmethoden in Nginx ist der gesamte Inhalt, den der Herausgeber mit Ihnen teilt. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen. Das könnte Sie auch interessieren:
|
<<: Detaillierte Verwendung von Echarts in vue2 vue3
>>: Detaillierte Erklärung des MySQL-Datenbankparadigmas
Anforderungen: Entfernen Sie HTTP-Antwortheader i...
Seitendesigns im dunklen Hintergrundstil sind seh...
Ich bin in letzter Zeit auf viele Zentrierungspro...
String-Extraktion ohne Trennzeichen Fragenanforde...
Inhaltsverzeichnis 1. Docker installieren 2. Code...
Vorwort: MYSQL dürfte die beliebteste WEB-Backend...
Vorbereitung Zuerst müssen Sie nodejs herunterlad...
Während der Projektentwicklung bin ich gestern auf...
Der Grund ist einfach: In HTML-Dokumenten entsprec...
Was ist MyCAT Ein vollständig Open Source-Großdat...
Der Originalcode lautet: <div Klasse = "K...
1. Zeitdifferenzfunktionen (TIMESTAMPDIFF, DATEDI...
Docker-Installation curl -fsSL https://get.docker...
Schauen Sie sich zuerst die Lösung an #----------...
Notieren Sie einige der Orte, an denen Sie Zeit v...