Nginx kann die Direktive „limit_req_zone“ des Moduls „ngx_http_limit_req_module“ verwenden, um den Zugriff zu beschränken und zu verhindern, dass Benutzer den Server böswillig angreifen und überlasten. Das Modul ngx_http_limit_req_module ist standardmäßig in nginx installiert, Sie können es also direkt konfigurieren. Konfigurieren Sie zunächst unter dem http-Modul in der Datei nginx.conf limit_req_zone $binary_remote_addr Zone=eins:10m Rate=1r/s; Hinweis: Der Bereichsname lautet eins (benutzerdefiniert), die belegte Raumgröße beträgt 10 m und die durchschnittliche Anforderungshäufigkeit kann nicht mehr als einmal pro Sekunde betragen. $binary_remote_addr ist das Binärformat von $remote_addr (Client-IP), das auf 4 Bytes festgelegt ist (wahrscheinlich die lange Typlänge in der Sprache C). $remote_addr wird als Zeichenfolge gespeichert und nimmt 7-15 Bytes ein. Es scheint, dass die Verwendung von $binary_remote_addr Platz sparen kann, aber im Internet steht, dass 64-Bit-Systeme alle 64 Bytes belegen. Ich verstehe das nicht ganz. Versuchen Sie trotzdem, $binary_remote_addr zu verwenden. Zweitens konfigurieren Sie es unter dem Submodulserver des http-Moduls Standort ~* .htm$ { limit_req Zone=eins Burst=5 Knotenlage; Proxy-Passwort http://backend_tomcat; } Hier beschränke ich die Anfrage mit dem URI-Suffix htm. Beachten Sie, dass limit_req zone=one burst=5 nodelay; Wobei zone=one der vorherigen Definition entspricht. Das Wort Burst wird im Internet oft als Spitzenwert bezeichnet. Durch persönliche Experimente habe ich jedoch festgestellt, dass dies nicht genau ist. Es sollte die Länge der Pufferwarteschlange genannt werden. Nodelay bedeutet wörtlich „keine Verzögerung“. Konkret bedeutet es, dass Benutzeranfragen nicht verzögert, sondern sofort verarbeitet werden. Beispielsweise beträgt die Rate, die ich oben definiert habe, 1r/s, was bedeutet, dass nur eine Anfrage pro Sekunde verarbeitet wird. Wenn zwei Anfragen mit dem Suffix htm gleichzeitig eingehen und nodelay gesetzt ist, werden diese beiden Anfragen sofort verarbeitet. Wenn Nodelay nicht festgelegt ist, wird die Konfiguration Rate=1r/s strikt durchgesetzt, das heißt, es wird nur eine Anforderung verarbeitet und dann in der nächsten Sekunde die nächste Anforderung. Intuitiv bleiben die Seitendaten hängen und das Laden dauert eine Sekunde. Die Konfigurationen, die zur Strombegrenzung wirklich funktionieren, sind Rate=1r/s und Burst=5. Lassen Sie uns unten einen konkreten Fall analysieren. Zu einem bestimmten Zeitpunkt treffen zwei Anfragen gleichzeitig bei nginx ein, von denen eine verarbeitet und die andere in die Pufferwarteschlange gestellt wird. Obwohl nodelay so konfiguriert ist, dass die zweite Anfrage sofort verarbeitet wird, belegt es dennoch eine bestimmte Länge der Pufferwarteschlange. Wenn in der nächsten Sekunde keine Anfrage eingeht, wird der durch die Burst-Länge belegte Speicherplatz freigegeben. Andernfalls wird der Burst-Speicherplatz weiterhin belegt, bis der Burst-Speicherplatz mehr als 5 belegt. Dann werden weitere Anfragen von nginx direkt abgelehnt und ein Fehlercode 503 zurückgegeben. Man erkennt, dass, wenn in der zweiten Sekunde noch zwei weitere Anfragen eingehen, eine der Anfragen einen weiteren Burst-Platz belegt. In der dritten Sekunde, der vierten Sekunde und der fünften Sekunde kommen jede Sekunde zwei Anfragen herein. Obwohl beide Anfragen verarbeitet werden (weil Nodelay konfiguriert ist), belegt eine der Anfragen immer noch eine Burst-Länge. Nach fünf Sekunden ist die gesamte Burst-Länge = 5 belegt. Innerhalb der sechsten Sekunde kamen zwei weitere Anfragen, eine davon wurde abgelehnt. Dies ist meine Schlussfolgerung, die auf tatsächlichen Testergebnissen basiert. Sie kann von der tatsächlichen Theorie abweichen, aber ich denke, dass sie auf diese Weise leichter zu verstehen ist. Wer die Antwort weiß, darf sie mir gerne mitteilen! Die hier verwendete $binary_remote_addr wird verwendet, wenn zwischen dem Client und nginx keine Proxy-Schicht vorhanden ist. Wenn Sie CDN vor nginx konfigurieren, ist der Wert von $binary_remote_addr die IP-Adresse von CDN. Es ist nicht richtig, den Durchfluss zu begrenzen. Zur Strombegrenzung muss die tatsächliche IP-Adresse des Benutzers ermittelt werden. Eine kurze Beschreibung lautet wie folgt: ## Holen Sie sich hier die IP-Adresse des ursprünglichen Benutzers map $http_x_forwarded_for $clientRealIp { "" $remote_addr; ~^(?P<ersteAdresse>[0-9\.]+),?.*$$ersteAdresse; } ## Begrenzen Sie die ursprüngliche Benutzer-IP-Adresse limit_req_zone $clientRealIp zone=one:10m rate=1r/s; In ähnlicher Weise können wir das Limit-Modul verwenden, um den Fluss von Webcrawlern zu begrenzen. http-Modul limit_req_zone $anti_spider Zone=Anti_Spider:10m Rate=1r/s; Servermodul Standort / { limit_req Zone=Anti-Spider-Burst=2 Knotenabstand; if ($http_user_agent ~* "spider|Googlebot") { setze $anti_spider $http_user_agent; } } Sie können es mit curl -I -A "Baiduspider" testen www.remotejob.cn/notice.jsp Die obige Methode zur Verwendung von limit_req_zone in Nginx zum Beschränken des Zugriffs auf dieselbe IP ist der gesamte Inhalt, den der Editor 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:
|
<<: So implementieren Sie Parallelitätskontrolle in JavaScript
>>: So verwenden Sie den temporären MySQL 5.7-Tablespace, um Fallstricke zu vermeiden
Kaskadierung und kaskadierende Ebenen HTML-Elemen...
Inhaltsverzeichnis 1. Die Beziehung zwischen Redu...
Beim Absenden eines Formulars kann es vorkommen, d...
Inhaltsverzeichnis Geschäftsszenario: Wirkungsdem...
In einem aktuellen Projekt musste ich die Funktio...
In diesem Artikelbeispiel wird der spezifische Ja...
Bei in SASS definierten Variablen überschreibt de...
Vorwort: Die Speicher-Engine ist der Kern der Dat...
Inhaltsverzeichnis 1. Was ist Komponentenbildung?...
So hosten Sie zwei oder mehr Sites auf dem belieb...
Neo4j (eines der NoSQL-Modelle) ist eine leistung...
Wie löst man das Problem 1045, wenn die lokale Da...
Es gibt viele Tags in XHTML, aber nur wenige werd...
Syntaxzusammensetzung: 1 Anmerkungsinformationen ...
1. Indexierungsprinzip Indizes werden verwendet, ...