So begrenzen Sie die Verbindungsrate (Anfragen) in Nginx

So begrenzen Sie die Verbindungsrate (Anfragen) in Nginx

In unserem letzten Artikel, der Teil unserer NGINX -Verkehrsmanagement -Serie ist. In diesem Leitfaden werden wir untersuchen Nginx.

Die Ratenbegrenzung ist eine Verkehrsmanagement -Technik, mit der die Anzahl der Anzahl eingehalten wird Http Anfragen, die ein Kunde in einem bestimmten Zeitraum stellen kann - die Ratengrenzen werden in berechnet Anfragen pro Sekunde (oder RPS).

Ein Beispiel für eine Anfrage ist a ERHALTEN Anfrage für die Anmeldeseite einer Anwendung oder a POST Anfrage in einem Anmeldeformular oder a POST auf an API Endpunkt.

Es gibt viele Gründe, die Anfragenquote für Ihre Webanträge oder API -Dienste zu begrenzen, eine Sicherheit: Schutz vor missbräuchlichen schnellen Anfragen.

Begrenzungsrate von Verbindungen in Nginx

Beginnen Sie zunächst die Parameter für die Rate-Limiting-Verwendung des limit_req_zone Richtlinie. Die erforderlichen Parameter sind ein Schlüssel zum Identifizieren von Clients, einer gemeinsamen Speicherzone, die den Status des Schlüssels speichert und wie oft er auf eine anforderungsbeschränkte URL zugegriffen hat, und den Rate.

Der limit_req_zone Die Richtlinie ist im HTTP -Kontext gültig.

limit_req_zone $ $ binary_remote_addr zone = limitReqsByAddr: 20m Rate = 10R/s; 

Legen Sie außerdem einen Antwortstatuscode fest, der an die abgelehnten Anforderungen zurückgegeben wird, indem Sie das verwenden limit_req_status Richtlinie, die in den Kontexten HTTP, Sever und Standort gültig ist.

limit_req_status 429; 

Jetzt können Sie die verwenden limint_conn Richtlinie zur Aktivierung von Anforderungsrate im Rahmen der Kontexte HTTP-, Sever und Standort. Es dauert eine Speicherzone als Parameter und andere optionale Parameter.

limit_req zone = limitReqsByAddr; 

Das folgende Konfigurationsbeispiel zeigt die Begrenzung der Anforderungsrate auf eine Webanwendungs ​​-API. Die gemeinsame Speichergröße beträgt 20 MB und die Anforderungsrestingrenze pro Sekunde 10 Anfragen pro Sekunde.

Upstream API_Service Server 127.0.0.1: 9051; Server 10.1.1.77: 9052;  limit_req_zone $ $ binary_remote_addr zone = limitReqsByAddr: 20m Rate = 10R/s; limit_req_status 429; Server Listen 80; server_name testApp.Tecmint.com; root/var/www/html/testApp.Tecmint.com/build; Indexindex.html; #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  limit_req zone = limitReqsByAddr; 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";  

Speichern Sie Ihre Konfigurationsdatei und schließen Sie sie.

Dann prüfen Sie, ob die Nginx Die Konfigurationssyntax ist mit dem folgenden Befehl korrekt:

$ sudo nginx -t 

Danach laden Sie die neu laden Nginx Service anwenden Sie die neuesten Änderungen an:

$ sudo systemctl reload nginx 

Sobald die Ratengrenze von 10 Die Anfragen pro Sekunde werden durch einen einzelnen Client -Zugriff übertroffen /api/, Nginx gibt eine zurück “429 zu viele AnfragenFehler beim Client.

Nginx 429 zu viele Anfragen Fehler

Es protokolliert auch den Vorfall im Fehlerprotokoll.

2022/04/29 00:30:38 [Fehler] 3145846#0: *131039 Begrenzende Anfragen, Überschuss: 0.990 nach Zone "LimitReqsbyaddr", Kunde: 192.168.1.10, Server: TestApp.Tecmint.com, Anfrage: "get/api/v1/app/meta-data http/1.1 ", Host:" Testapp.Tecmint.com ", referrer:" https: // testApp.Tecmint.com/" 
Nginx -Fehlerprotokolle

Manchmal muss ein Kunde abhängig von der Art Ihrer Bewerbung oder API viele Anfragen auf einmal stellen und dann seinen Preis für einen bestimmten Zeitraum reduzieren, bevor Sie mehr machen. Nginx kann auch überschüssige Anforderungen in einer Warteschlange pufferen und sie umgehend verarbeiten.

Sie können dieses Verhalten in der geschwindigkeitsbegrenzenden Verwendung der Verwendung der platzen Parameter mit dem limit_req Richtlinie. Fügen Sie das hinzu, um die Warteschlange ohne Verzögerung zu ermöglichen keine Verzögerung Parameter.

limit_req zone = limitReqsbyaddr burst = 20 nodelay; 

Es gibt eine Haken mit einer Ratenbeschränkung basierend auf der IP eines Kunden, insbesondere für Benutzer, die auf Ihre Anwendung aus demselben Netzwerk zugreifen und hinter einem NAT arbeiten. In diesem Fall stammen alle ihre Anfragen aus derselben IP -Adresse. In einem solchen Szenario können Sie andere Variablen verwenden, um Clients wie ein Session Cookie zu identifizieren.

Weitere Informationen zur Begrenzung der Anfragenquote finden Sie in dieser Nginx -Rate auf der NGINX -Website. Als nächst Nginx.