Analyse der Implementierung der Nginx Rush-Kaufstrombegrenzungskonfiguration

Analyse der Implementierung der Nginx Rush-Kaufstrombegrenzungskonfiguration

Aus geschäftlichen Gründen kommt es häufig zu Eilkäufen, daher ist es notwendig, die Fehlerhäufigkeit am Frontend des Lastausgleichs zu begrenzen. Dieser Artikel gilt auch für die Vorbeugung von CC.

  limit_req_zone $server_name zone=sname:10m rate=1r/s; #Beschränken Sie den Server auf nur einen erfolgreichen Zugriff pro Sekunde #limit_req_zone $binary_remote_addr zone=one:3m rate=1r/s; #Beschränken Sie IP, nur ein Zugriff pro Sekunde #limit_req_zone $binary_remote_addr $uri zone=two:3m rate=1r/s; #Beschränken Sie IP und Pfad ohne Parameter,
    #limit_req_zone $binary_remote_addr $request_uri zone=thre:3m rate=1r/s; #IP und Pfad mit den Parametern server { begrenzen
    hören Sie 80;
    Servername www.abc.com;
    Standort / {
        host/proxy.cnf einschließen;
        Proxy-Passwort http://backend;
    }
    Standort /api/createOrder {
        limit_req zone=sname; #Kein Burst, nur eine normale Anfrage limit_req_status 503; #Setze den zurückgegebenen Statuscode auf 503
        #limit_req zone=sname burst=5 nodelay; #Die maximale Parallelität beträgt 5 und die Echtzeitverarbeitung umfasst host/proxy.cnf;
        Proxy-Passwort http://backend;
        error_page 503 =200 /50x.html; #Das ist sehr wichtig. Sie können den Fehlerstatuscode auf 503 setzen und das Ergebnis als 200 zurückgeben
    }
    Standort = /50x.html {
        if ($http_user_agent ~* "mobile|android|iPhone|iphone|ios|iOS"){
            #Standardtyp Anwendung/json;
            return 200 '{"msg": "Die Veranstaltung ist zu beliebt, bitte versuchen Sie es später noch einmal!","data": {},"code": -1}'; #Stellen Sie das mobile Endgerät so ein, dass eine Fehlermeldung angezeigt wird}
        root html; #Wenn es ein PC ist, gib eine HTML-Seite zurück}
    }

Wichtiger Punkt: Unter normalen Umständen lautet der zurückgegebene Statuscode 503, wenn das aktuelle Limit festgelegt ist. Selbst wenn Sie für das mobile Endgerät JSON-Daten zurückgeben, erkennt der Client diese nicht. Zu diesem Zeitpunkt können Sie den Statuscode geschickt über error_page 403 =200 /50x.html auf 200 setzen.

Oben wird nur das Modul ngx_limit_req_module verwendet. Das Modul ngx_limit_conn_module kann ebenfalls verwendet werden.

Referenz: https://gist.github.com/simlegate/75b18359316cc33d8e20

Insbesondere wenn einige Beratungswebsites das Ziel von Crawlern sind, kann der Server von den Crawlern zerstört werden (dies ist bei kleinen Websites der Fall).
Was können wir also tun? Wir können Variablen verwenden, um

#Globale Konfiguration limit_req_zone $spider zone=spider:60m rate=200r/m; #Beschränken Sie den Crawler auf 200 Ausführungen pro Minute #In einem Server limit_req zone=spider burst=5 nodelay;
if ($http_user_agent ~* "spider|bot") {
  set $spider $http_user_agent; #Variablen festlegen und die Geschwindigkeit begrenzen, wenn Sie hier eintreten}

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:
  • Detaillierte Erläuterung der Nginx-Strombegrenzungskonfiguration
  • Detaillierte Erläuterung der Verbindungslimitkonfiguration von Nginx für IP-Adressen in einem Netzwerksegment
  • Praktische Aufzeichnung der aktuellen Einschränkungen und des Konfigurationsmanagements von Nginx

<<:  Wie implementiert Vue die Kommunikation zwischen Komponenten?

>>:  Ursachenanalyse und Lösung des E/A-Fehlers beim Löschen einer MySQL-Tabelle

Artikel empfehlen

So wählen Sie den richtigen MySQL-Datums-/Uhrzeittyp zum Speichern Ihrer Zeit

Beim Erstellen einer Datenbank und Schreiben eine...

Komponentendesignspezifikationen für die Entwicklung von WeChat-Miniprogrammen

Designspezifikationen für WeChat Mini-Programmkom...

Standard-CSS-Stil der XHTML-Sprache

html,Adresse, Blockzitat, Körper, dd, div, dl,dt,...

Richtige Verwendung der Vue-Funktion Anti-Shake und Throttling

Vorwort 1. Entprellen: Nach dem Auslösen eines Ho...

Installations-Tutorial für mysql8.0rpm auf centos7

Laden Sie zunächst das Diagramm herunter 1. Deins...

Beispielverwendung des Linux-Komprimierungsdateibefehls „zip“

Das „.zip“-Format wird zum Komprimieren von Datei...

So erstellen Sie eine MySQL-Datenbank (de1) mit Befehlen

1. Verbindung zu MySQL herstellen Format: mysql -...

Tabellen in HTML aufteilen und zusammenführen (colspan, rowspan)

Der Code demonstriert die horizontale Zusammenfüh...

WeChat-Applet-Beispiel für die direkte Verwendung von Funktionen in {{ }}

Vorwort Bei der WeChat-Applet-Entwicklung (native...