Detaillierte Erklärung der Kontrolle des Zugriffsvolumens durch Nginx

Detaillierte Erklärung der Kontrolle des Zugriffsvolumens durch Nginx

Zweck

Machen Sie sich mit den Nginx-Modulen ngx_http_limit_conn_module und ngx_http_limit_req_module vertraut, um das Anforderungszugriffsvolumen zu steuern.

Nginx-Modularität

Die interne Struktur von nginx besteht aus einem Kernmodul und einer Reihe von Funktionsmodulen. Durch die modulare Architektur sind die Funktionen der einzelnen Module relativ einfach, was zu einer hohen Kohäsion führt und zudem die funktionale Erweiterung von Nginx erleichtert.

Für Webanforderungen bilden alle aktivierten Module von Nginx eine Kette, ähnlich den Levels in einem Spiel. Jedes Modul ist für eine bestimmte Funktion verantwortlich, wie beispielsweise das Modul ngx_http_gzip_module für die Komprimierung, das Modul ngx_http_auth_basic_module für die Authentifizierung und das Modul ngx_http_proxy_module für den Proxy. Verbindungsanfragen zum Server werden nacheinander von jedem Nginx-Modul verarbeitet. Erst nachdem sie von diesen Modulen verarbeitet wurden, werden die Anfragen tatsächlich zur Verarbeitung an den Hintergrundprogrammcode übergeben.

Gleichzeitige Zugriffskontrolle mit Nginx

Bei Webservern sind bei Angriffen durch Webcrawler oder bösartige Angriffe mit großem Datenverkehr der Serverspeicher und die CPU sowie die Bandbreite voll. Daher ist es als ausgereifte Server-Proxy-Software erforderlich, diese Situationen kontrollieren zu können.

Es gibt zwei Möglichkeiten, die Parallelität in Nginx zu steuern. Eine besteht darin, die Parallelität über IP oder andere Parameter zu steuern. Die andere besteht darin, die Gesamtzahl der pro Zeiteinheit verarbeiteten Anforderungen zu steuern. Das heißt, die Steuerung von Gleichzeitigkeit und Parallelität. Diese beiden Funktionen werden von den Modulen ngx_http_limit_conn_module bzw. ngx_http_limit_req_module implementiert.

Modul ngx_http_limit_conn_module

veranschaulichen

Dieses Modul wird hauptsächlich zur Steuerung der Anzahl gleichzeitiger Anfragen verwendet.

Parameterkonfiguration

Verbindungsbegrenzungszone

Befehlskonfiguration limit_conn_zone Schlüsselzone=Name:Größe
Konfigurationskontext: http
Hinweis: Schlüssel ist eine Variable in Nginx, normalerweise binaryremoteaddr|server_name; Name ist der Name des gemeinsam genutzten Speichers und Größe ist die Größe des gemeinsam genutzten Speichers; diese Konfiguration gilt für einen gemeinsam genutzten Speicherplatznamen und speichert den Zugriffsstatus des Schlüssels

limit_conn_log_level

Syntax: limit_conn_log_level info|notice|warn|error
Standardwert: Fehler
Konfigurationskontext: http, Server, Standort
Hinweis: Wenn der Zugriff die maximale Grenze erreicht, wird die Zugriffssituation im Protokoll aufgezeichnet

limit_conn

Syntax: limit_conn Zonenname Nummer
Konfigurationskontext: http, Server, Standort
Hinweis: Verwenden Sie zone_name zur Zugriffskontrolle. Wenn die Zahl überschritten wird, wird der entsprechende Fehlercode zurückgegeben.

limit_conn_status

Syntax: limit_conn_status code
Standardwert: 503
Konfigurationskontext: http, Server, Standort
Beschreibung: Wenn der Zugriff die Grenzzahl überschreitet, wird der Fehlercode an den Client zurückgegeben. Dieser Fehlercode kann mit Parametern wie error_page verwendet werden, um dem Client eine benutzerfreundliche Fehlerseite zurückzugeben, wenn der Zugriff die Grenzzahl überschreitet.

Grenzrate

Syntax: limit_rate rate
Standardwert: 0
Konfigurationskontext: http, Server, Standort
Beschreibung: Begrenzen Sie die Rate jedes Links. Die Rate gibt die Downloadgeschwindigkeit pro Sekunde an.

limit_rate_nach

Syntax: limit_rate_after Größe
Konfigurationskontext: http, Server, Standort
Hinweis: Dieser Befehl wird zusammen mit limit_rate verwendet. Wenn der Datenverkehr die Größe überschreitet, wird limit_rate wirksam.

Einfaches Konfigurationsbeispiel

Verbindungslimitzone $binary_remote_addr Zone=Adresse:10m;
Server {
  hören Sie 80;
  Servername www.domain.com;
  Stammverzeichnis /Pfad/;
  Index Index.html Index.htm;
  Standort /IP {
   limit_conn_status 503; # Der Statuscode, der nach Überschreiten des Limits zurückgegeben wird;
   limit_conn_log_level warn; # Protokollierungsebene limit_rate 50; # Bandbreitenlimit limit_conn addr 1; # Gleichzeitigen Zugriff kontrollieren}
  # Wenn das Limit für gleichzeitige Zugriffe überschritten wird, wird die Fehlerseite 503 error_page 503 /503.html zurückgegeben.
}

Modul ngx_http_limit_req_module

veranschaulichen

Dieses Modul steuert hauptsächlich die Anzahl der Anfragen pro Zeiteinheit. Verwenden Sie zum Filtern den „Leaky Bucket“-Algorithmus. Wenn nach dem Festlegen der Grenzrate die Anzahl der Anfragen pro Zeiteinheit die Rate überschreitet, erkennt das Modul den Burst-Wert. Wenn der Wert 0 ist, gibt die Anfrage einen Fehler zurück oder wartet entsprechend der Verzögerungs-|Knotenverzögerungskonfiguration; wenn der Burst größer als 0 ist und die Anzahl der Anfragen größer als die Rate, aber kleiner als der Burst ist, wird die Anfrage zur Verarbeitung in die Warteschlange gestellt.

Parameterkonfiguration

limit_req_zone

Syntax: limit_req_zone Schlüsselzone=Name:Größe Rate=Rate
Konfigurationskontext: http
Hinweis: Schlüssel ist eine Variable in Nginx, normalerweise binaryremoteaddr|server_name; Name ist der Name des gemeinsam genutzten Speichers, Größe ist die Größe des gemeinsam genutzten Speichers; Rate ist die Zugriffshäufigkeit, die Einheit ist r/s, r/m. Diese Konfiguration gilt für einen gemeinsam genutzten Speicherplatznamen und speichert den Zugriffsstatus von $key.

Grenzwert_Anforderung

Syntax: limit_rate zone=Name [burst=Nummer] [nodelay|delay=Nummer]
Konfigurationskontext: http, Server, Standort
Hinweis: Aktivieren Sie das Limit, legen Sie die maximale Kapazität für Burst fest und entscheiden Sie, ob mit der Verarbeitung gewartet oder ein Fehlercode zurückgegeben werden soll, wenn die Anforderung das Limit überschreitet.

Die Konfigurationsparameter limit_req_log_level und limit_req_status stimmen mit dem Modul ngx_http_limit_conn_module überein.

Einfaches Konfigurationsbeispiel

limit_req_zone $binary_remote_addr Zone=Anforderung:10m Rate=2r/m;
Server {
  hören Sie 80;
  Servername www.domain.com;
  Stammverzeichnis /Pfad/;
  Index Index.html Index.htm;
  Standort /Limit {
   limit_req Zone=req Burst=3 Knotenanzahl;
  }
  # Wenn das Limit für gleichzeitige Zugriffe überschritten wird, wird die Fehlerseite 503 error_page 503 /503.html zurückgegeben.
}

Beachten

Für beide Arten der Zugriffskontrolle ist die Beantragung von Speicherplatz erforderlich. Da Speicherplatz vorhanden ist, kommt es natürlich zu Situationen, in denen der Speicher erschöpft ist. Zu diesem Zeitpunkt werden neue Anforderungen mit Fehlern zurückgegeben. Wenn Zugriffsbeschränkungen aktiviert sind, ist daher eine Überwachung erforderlich, um solche Situationen zu verhindern.

Zusammenfassung

Durch eine kurze Einführung in die modulare Architektur von Nginx konzentrieren wir uns auf das Verständnis der Funktionen und Konfigurationsparameter der Module ngx_http_limit_conn_module und ngx_http_limit_req_module und implementieren die Parallelitätssteuerung von Anforderungen von Nginx. Wenn etwas nicht stimmt, informieren Sie uns bitte

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:
  • Zusammenfassung der drei Methoden zur Implementierung der Graustufenfreigabe in Nginx
  • Detaillierte Erläuterung der Veröffentlichung und Bereitstellung von Asp.Net Core (MacOS + Linux + Nginx)
  • Eine kurze Analyse von nginScript, der gerade von nginx veröffentlichten JavaScript-Funktion
  • Einrichten eines Proxyservers mit nginx
  • Versuch der Bereitstellung von Docker-Containern – Kommunikation mit mehreren Containern (Node+MongoDB+Nginx)
  • Detaillierte Erklärung der Verwendung von Nginx proxy_redirect
  • Beispiel für die Installation von nginx in einem angegebenen Verzeichnis
  • So konfigurieren Sie Nginx zur Unterstützung von IPv6 unter Linux
  • Detaillierte Erläuterung des Front-End- und Back-End-Bereitstellungstutorials basierend auf Vue und Nginx
  • So verwenden Sie Nginx zum Simulieren der Canary-Freigabe

<<:  Vue + Element + OSS realisiert das Hochladen von Front-End-Fragmenten und die Wiederaufnahme von Haltepunkten

>>:  So installieren Sie Mysql5.7 in Centos6

Artikel empfehlen

React + ts realisiert den sekundären Verknüpfungseffekt

In diesem Artikel wird der spezifische Code von R...

Lösung für das Textüberlaufproblem auf CSS-Flex-Basis

Die unbedeutende flex-basis hat bei der kleinen F...

jQuery implementiert ein atmendes Karussell

In diesem Artikel wird der spezifische Code von j...

WeChat-Applet implementiert Taschenrechnerfunktion

WeChat-Miniprogramme erfreuen sich immer größerer...

Allgemeine Befehle für MySQL-Autorisierung, Start und Dienststart

1. Vier Startmethoden: 1.mysqld Starten Sie den M...

IIS und APACHE implementieren die HTTP-Umleitung auf HTTPS

IIS7 Laden Sie das HTTP Rewrite-Modul von der off...

js und jquery, um einen Tab-Statusleisten-Umschalteffekt zu erzielen

Heute werden wir einen einfachen Fall durchgehen ...

30 Minuten, um Ihnen ein umfassendes Verständnis von React Hooks zu vermitteln

Inhaltsverzeichnis Überblick 1. useState 1.1 Drei...

Was ist Webdesign

<br />Originalartikel: http://www.alistapart...

So fügen Sie einem Benutzer in einer Linux-Umgebung Sudo-Berechtigungen hinzu

sudo-Konfigurationsdatei Die Standardkonfiguratio...

Implementierung zum Erstellen benutzerdefinierter Images mit Dockerfile

Inhaltsverzeichnis Vorwort Einführung in Dockerfi...