So begrenzen Sie die Anzahl der Verbindungen (Anforderungen) in Nginx

So begrenzen Sie die Anzahl der Verbindungen (Anforderungen) in Nginx

Nginx Versendet mit verschiedenen Modulen, mit denen Benutzer den Verkehr auf ihre Websites, Webanwendungen sowie andere Webressourcen steuern können. Einer der Hauptgründe für die Begrenzung des Verkehrs oder des Zugangs besteht darin, Missbräuche oder Angriffe bestimmter Arten wie z DOS (Denial of Service) Anschläge.

Es gibt drei Hauptmethoden, um die Nutzung oder den Verkehr in zu begrenzen Nginx:

  1. Begrenzung der Anzahl der Verbindungen (Anfragen).
  2. Begrenzung des Anfragensatzes.
  3. Bandbreite einschränken.

Obenstehendes Nginx Die Datenverwaltungsansätze können je nach Anwendungsfall auf der Grundlage eines definierten Schlüssels konfiguriert werden, wobei die häufigste IP -Adresse eines Clients ist. Nginx unterstützt auch andere Variablen wie ein Session Cookie und viele mehr.

In diesem ersten Teil unserer dreiteiligen Serie werden wir diskutieren, wie die Anzahl der Verbindungen in einschränken kann Nginx um Ihre Websites/Anwendungen zu schützen.

  • So begrenzen Sie die Anzahl der Verbindungen (Anforderungen) in Nginx - Teil 1
  • So begrenzen Sie die Verbindungsrate (Anfragen) in Nginx - Teil 2
  • So begrenzen Sie die Gebrauchsnutzung der Bandbreite in Nginx - Teil 3

Denk daran, dass Nginx Berücksichtigt eine Verbindung nur dann, wenn eine Anfrage vom Server bearbeitet wird und der gesamte Anforderungsheader bereits gelesen wurde. Daher werden nicht alle Clientverbindungen gezählt.

Begrenzung der Anzahl der Verbindungen in Nginx

Zunächst müssen Sie eine gemeinsame Speicherzone definieren, die Verbindungsmetriken für verschiedene Schlüssel speichert limit_conn_zone Richtlinie. Wie bereits erwähnt, kann ein Schlüssel ein Text, eine Variable wie die Remote -IP -Adresse eines Kunden oder eine Kombination aus beiden sein.

Diese Richtlinie, die im HTTP -Kontext gültig ist Taste und das Zone (im Format Zone_Name: Größe).

limit_conn_zone $ $ BINARY_REMOTE_ADDR ZONE = limitConnbyaddr: 20m; 

Um einen Antwortstatuscode festzulegen, der an abgelehnte Anforderungen zurückgegeben wird, verwenden Sie die limit_conn_status Richtlinie, die einen HTTP -Statuscode als Parameter nimmt. Es ist in den Kontexten HTTP, Server und Standort gültig.

limit_conn_status 429; 

Verwenden Sie die Verbindungen, um die Verbindungen zu begrenzen limint_conn Anweisung So setzen Sie die zu verwendende Speicherzone und die maximale Anzahl zulässiger Verbindungen wie in den folgenden Konfigurationsausschnitten gezeigt. Diese Richtlinie ist in den Kontexten HTTP, Server und Standort gültig.

limit_conn limitConnbyaddr 50; 

Hier ist die vollständige Konfiguration:

Upstream API_Service Server 127.0.0.1: 9051; Server 10.1.1.77: 9052;  limit_conn_zone $ $ BINARY_REMOTE_ADDR ZONE = limitConnbyaddr: 20m; limit_conn_status 429; Server Listen 80; server_name testApp.Tecmint.com; root/var/www/html/testApp.Tecmint.com/build; Indexindex.html; limit_conn limitConnbyaddr 50; #Include Snippets/ERROR_PAGES.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; location / try_files $ uri $ uri / / Index.HTML = 404 = 403 = 500;  location/api proxy_pass http: // api_service; proxy_set_header x-real-ip $ remote_addr; proxy_set_header host $ host; proxy_set_header x-forward-for $ proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header upgrade $ http_upgrade; Proxy_set_header -Verbindung "Upgrade";  
Begrenzen Sie Nginx -Verbindungen

Speichern Sie die Datei und schließen Sie sie.

Dann prüfen Sie, ob die Nginx Die Konfiguration ist in Ordnung, indem der folgende Befehl ausgeführt wird:

$ sudo nginx -t 

Als nächstes laden Sie die neu laden Nginx Service, um die jüngsten Änderungen zu bewirken:

$ sudo systemctl reload nginx 

Überprüfung der Nginx -Verbindungslimit

Wenn ein Client die maximale Anzahl der zulässigen Verbindungen überschreitet, Nginx Gibt eine "zurück"429 zu viele AnfragenFehler beim Client und registriert einen Eintrag wie den folgenden in der Fehlerprotokolldatei:

2022/03/15 00:14:00 [Fehler] 597443#0: *127 Begrenzende Verbindungen nach Zone "LimitConnByAddr", Client: x.X.X.X, Server: TestApp.Tecmimt.com, Anfrage: "Get/static/CSS/Main.63fdefff.Chunk.CSS.Karte HTTP/1.1 ", Host:" Testapp.Tecmimt.com " 
Nginx -Verbindungsbegrenzungsfehler

Begrenzung der NGINX -Anzahl von Verbindungen zur Anwendung

Sie können auch die Anzahl der Verbindungen für einen bestimmten Server einschränken, indem Sie die verwenden $ server_name Variable:

Upstream API_Service Server 127.0.0.1: 9051; Server 10.1.1.77: 9052;  limit_conn_zone $ server_name zone = limitByServers: 10m; limit_conn_status 429; Server Listen 80; server_name testApp.Tecmint.com; root/var/www/html/testApp.Tecmint.com/build; Indexindex.html; limit_conn limitByServers 2000; #Include Snippets/ERROR_PAGES.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; location / try_files $ uri $ uri / / Index.HTML = 404 = 403 = 500;  location/api proxy_pass http: // api_service; proxy_set_header x-real-ip $ remote_addr; proxy_set_header host $ host; proxy_set_header x-forward-for $ proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header upgrade $ http_upgrade; Proxy_set_header -Verbindung "Upgrade";  

Diese Konfiguration ermöglicht Nginx Um die Gesamtzahl der Verbindungen zum virtuellen Server zu begrenzen, der die Anwendung mit Strom versorgt testApp.Tecmint.com, Zu 2000 Verbindungen.

Notiz: Begrenzende Verbindungen basierend auf der IP eines Kunden haben einen Nachteil. Möglicherweise beschränken Sie Verbindungen für mehr als nur einen Benutzer, insbesondere wenn viele Benutzer, die auf Ihre Anwendung zugreifen Nat - Alle ihre Verbindungen stammen aus derselben IP -Adresse.

In einem solchen Szenario können Sie eine oder mehrere Variablen verwenden, die in Nginx verfügbar sind, die einen Kunden auf Anwendungsebene identifizieren können. Ein Beispiel ist a Session Cookie.

Möglicherweise mögen Ihnen auch die folgenden NGINX -verwandten Artikel:

  • So erstellen Sie eine benutzerdefinierte 404 -Fehlerseite in Nginx
  • So steuern Sie den Zugriff basierend auf der Client -IP -Adresse in NGINX
  • Wie man Inhalte in Nginx zwischenspeichert
  • So aktivieren Sie HTTP/2.0 in nginx
  • So verwenden Sie Nginx als HTTP -Lastausgleich unter Linux

Das war es fürs Erste! Im nächsten Teil dieser Serie werden wir eine andere nützliche Verkehrsmanagementtechnik in diskutieren Nginx - Begrenzung des Anfragensatzes. Bis dahin bleiben Sie bei uns.