Jak ograniczyć szybkość połączeń (żądań) w Nginx

Jak ograniczyć szybkość połączeń (żądań) w Nginx

W naszym ostatnim artykule, który jest częścią naszej serii zarządzania ruchem Nginx, omówiliśmy, jak ograniczyć liczbę połączeń w Nginx. W tym przewodniku przyjrzymy się, jak ograniczyć szybkość żądań Nginx.

Ograniczanie stawek to technika zarządzania ruchem stosowana w celu ograniczenia liczby Http żądania, które klient może złożyć w danym okresie - limity stawki są obliczane w Żądania na sekundę (Lub Rps).

Przykładem żądania jest DOSTAWAĆ żądanie strony logowania aplikacji lub a POST żądanie w formularzu logowania lub POST na API punkt końcowy.

Istnieje wiele powodów, aby ograniczyć tempo żądań do aplikacji internetowych lub usług API, jedno jest bezpieczeństwo: ochrona przed obraźliwymi szybkimi żądaniami.

Ograniczanie szybkości połączeń w Nginx

Zacznij od zdefiniowania parametrów ograniczania szybkości za pomocą limit_req_zone dyrektywa. Wymagane parametry są kluczem do identyfikacji klientów, współdzielonej strefy pamięci, która będzie przechowywać stan klucza i jak często uzyskuje dostęp do adresu URL z ograniczonym żądaniem oraz stawki.

limit_req_zone Dyrektywa jest ważna w kontekście HTTP.

limit_req_zone $ binary_remote_addr strefa = limitreqsbyaddr: stawka 20m = 10r/s; 

Ustaw także kod stanu odpowiedzi, który jest zwracany do odrzuconych żądań, używając limit_req_status Dyrektywa, która jest ważna w kontekście HTTP, Sever i lokalizacji.

limit_req_status 429; 

Teraz możesz użyć limint_conn Dyrektywa, aby umożliwić ograniczenie szybkości żądania w kontekście HTTP, SINE i lokalizacji. Zajmuje strefę pamięci jako parametr i inne opcjonalne parametry.

limit_req streone = limitreqsbyAddr; 

Poniższy przykład konfiguracji pokazuje ograniczenie szybkości żądania do interfejsu API aplikacji internetowych. Rozmiar pamięci współdzielonej wynosi 20 MB, a limit szybkości żądania wynosi 10 żądań na sekundę.

Upstream API_Service Server 127.0.0.1: 9051; serwer 10.1.1.77: 9052;  limit_req_zone $ binary_remote_addr strefa = limitreqsbyaddr: stawka 20m = 10r/s; limit_req_status 429; serwer Słuchaj 80; Server_name TestApp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; indeks indeksu.html; #Include Sneppets/Errber_pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; lokalizacja / try_files $ URI $ URI / / Index.HTML = 404 = 403 = 500;  lokalizacja /API  limit_req streone = limitreqsbyAddr; proxy_pass http: // api_service; proxy_set_header x-real-ip $ remote_addr; proxy_set_header host $ host; proxy_set_header x-forwarded-for $ proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header aktualizację $ http_upgrade; Proxy_set_head Connection „Upgrade”;  

Zapisz swój plik konfiguracyjny i zamknij go.

Następnie sprawdź, czy Nginx Składnia konfiguracji jest poprawna przy użyciu następującego polecenia:

$ sudo nginx -t 

Następnie ponownie załaduj Nginx Usługa Zastosuj najnowsze zmiany:

$ sudo systemCtl Reload nginx 

Kiedyś limit szybkości 10 żądania na sekundę są przekraczane przez dostępnego klienta /API/, Nginx zwraca „429 zbyt wiele żądań„Błąd dla klienta.

Nginx 429 zbyt wiele żądań błąd

Rejestruje również incydent w dzienniku błędów.

2022/04/29 00:30:38 [Błąd] 3145846#0: *131039 Prośby o ograniczenie, nadmiar: 0.990 według strefy „limitreqsbyaddr”, klient: 192.168.1.10, serwer: TestApp.Tecmint.com, żądanie: "get/api/v1/app/meta-data http/1.1 ", host:„ TestApp.Tecmint.com ", polecenie:" https: // testapp.Tecmint.com/" 
Dzienniki błędów Nginx

Czasami w zależności od charakteru aplikacji lub interfejsu API klient będzie musiał złożyć wiele żądań jednocześnie, a następnie zmniejszyć swoją stawkę na okres czasu, zanim zrobisz więcej. Nginx może również buforować wszelkie nadmierne żądania w kolejce i przetwarzać je niezwłocznie.

Możesz włączyć to zachowanie w ograniczaniu szybkości za pomocą pękać parametr z limit_req dyrektywa. Aby umożliwić kolejkę bez opóźnienia, dodaj bez opóźnień parametr.

limit_req streone = limitreqsbyaddr wybuch = 20 NodeLay; 

Istnieje zaczep z ograniczaniem stawek w oparciu o adres IP klienta, szczególnie dla użytkowników uzyskujących dostęp do aplikacji z tej samej sieci i działający za NAT. W takim przypadku wszystkie ich żądania pochodzą z tego samego adresu IP. W takim scenariuszu możesz użyć innych zmiennych do identyfikacji klientów, takich jak sesyjne plik cookie.

Aby uzyskać więcej informacji na temat ograniczenia stawki żądań, sprawdź tę ograniczenie stawki Nginx na stronie internetowej Nginx. Następnie omówimy, jak ograniczyć użycie przepustowości w Nginx.