Jak ograniczyć przepustowość sieci na serwerze WWW Nginx

Jak ograniczyć przepustowość sieci na serwerze WWW Nginx

Wcześniej w naszym Nginx Seria zarządzania ruchem i kontroli bezpieczeństwa, omówiliśmy, jak ograniczyć liczbę połączeń, które ten sam klient może wykonać z zasobami internetowymi, za pomocą parametrów identyfikacji klienta, takich jak adres IP. Omówiliśmy również sposób ograniczenia stawki żądań (ogranicz szybkość, z jaką klient może składać żądania) dla zasobów internetowych.

Aby upewnić się, że przepustowość użytkowania aplikacji nie jest wydawana przez jednego klienta, musisz kontrolować prędkości przesyłania i pobierania na klienta. To jest powszechne Nginx kontrola bezpieczeństwa przeciwko Dos (Odmowa usługi) Ataki ze strony złośliwych użytkowników, którzy tylko próbują nadużyć wydajności witryny.

W tej trzeciej części serii wyjaśnimy, jak ograniczyć przepustowość sieci w Nginx serwer internetowy.

Ograniczanie przepustowości w nginx

Aby ograniczyć przepustowość w Nginx, Użyj limit_rate dyrektywa, która ogranicza szybkość transmisji odpowiedzi na klienta. Jest ważny w Http, serwer, Lokalizacja, I If oświadczenie w granicach Lokalizacja blok i określa limit szybkości dla danego kontekstu w bajtach na sekundę domyślnie. Możesz także użyć M dla megabajtów lub G dla gigabajtów.

limit_rate 20k; 

Inną powiązaną dyrektywą jest limit_rate_after, co określa, że ​​połączenie nie powinno być ograniczone do stawki, dopóki po przesłaniu określonej ilości danych. Dyrektywa można ustawić w HTTP, serwerze, lokalizacji i „instrukcji IF w bloku lokalizacji”.

limit_rate_after 500k; 

Oto przykładowa konfiguracja ograniczona przez klienta do pobrania treści przez jedno połączenie z maksymalną prędkością 20 kilobajtów na sekundę.

Upstream API_Service Server 10.1.1.10: 9051; serwer 10.1.1.77: 9052;  serwer słuchaj 80; Server_name TestApp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; indeks indeksu.html; lokalizacja / try_files $ URI $ URI / / Index.HTML = 404 = 403 = 500;  lokalizacja/api 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”;  lokalizacja /dokumenty  limit_rate 20k; limit_rate_after 500k;  

Po dodaniu wymaganych ustawień wyjaśnionych powyżej, zapisz zmiany i zamknij plik. Następnie sprawdź, czy Nginx Składnia konfiguracji jest poprawna, jak więc:

$ sudo nginx -t 

Jeśli wszystko jest w porządku, ponownie załaduj Nginx usługa w celu wprowadzenia najnowszych zmian:

$ sudo systemCtl Reload nginx 

Ograniczanie przepustowości i liczby połączeń w Nginx

Dzięki powyższej konfiguracji klient może otworzyć kilka połączeń, aby zwiększyć przepustowość. Dlatego dodatkowo możesz również ograniczyć połączenia na klienta za pomocą parametru takiego jak adres IP, jak wcześniej patrzyliśmy.

Na przykład możesz ograniczyć jedno połączenie na adres IP.

Upstream API_Service Server 127.0.0.1: 9051; serwer 10.1.1.77: 9052;  limit_conn_zone $ binary_remote_addr Zone = limitConnbyAddr: 20m; limit_conn_status 429; serwer Słuchaj 80; Server_name TestApp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; indeks indeksu.html; lokalizacja / try_files $ URI $ URI / / Index.HTML = 404 = 403 = 500;  lokalizacja /API  limit_conn limitConnbyAddr 5; 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”;  lokalizacja /dokumenty  limit_rate 50k; limit_rate_after 500k; limit_conn limitConnbyAddr 1;  

Dynamicznie ograniczanie przepustowości w nginx

Jako wartość parametru do limit_rate dyrektywa, możesz określić zmienne, aby dynamicznie ograniczyć przepustowość. Jest to szczególnie przydatne w sytuacjach, w których stawka powinna być ograniczona w zależności od określonego warunku.

W tym przykładzie używamy bloku mapy. Umożliwiło utworzenie nowej zmiennej, której wartość zależy od wartości jednej lub więcej oryginalnych zmiennych ($ powolne I $ limit_rate) określony w pierwszym parametrze.

Upstream API_Service Server 10.1.1.10: 9051; serwer 10.1.1.77: 9052;  mapa $ slow $ limit_rate 1 20K; 2 30k;  serwer Słuchaj 80; Server_name TestApp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; indeks indeksu.html; lokalizacja / try_files $ URI $ URI / / Index.HTML = 404 = 403 = 500;  lokalizacja/api 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”;  lokalizacja /dokumenty  limit_rate $ limit_rate; limit_rate_after 500k;  

Oto kolejny przykładowy przykład konfiguracji, aby zilustrować dynamiczne ograniczenie przepustowości w Nginx. Ta konfiguracja umożliwia Nginx ograniczenie przepustowości na podstawie wersji TLS. Dyrektywa limit_rate_after 512 implikuje stopę limitu po wysłaniu nagłówków.

Upstream API_Service Server 10.1.1.10: 9051; serwer 10.1.1.77: 9052;  mapa $ ssl_protocol $ response_rate "tlsv1.1 „50k;” TLSV1.2 „100k;” TLSV1.3 "500K; serwer Słuchaj 443 SSL; SSL_PROTOCOLS TLSV1.1 TLSV1.2 TLSV1.3; SSL_Certificate/Etc/SSL/TestApp.crt; SSL_Certificate_Key/Etc/SSL/TestApp.klucz; lokalizacja / limit_rate $ response_rate; # Limit przepustowości oparty na limicie wersji tls_rate_after 512; proxy_pass http: // api_service;  

To wszystko, co mieliśmy dla ciebie w tej części serii. Będziemy nadal omawiać więcej tematów dotyczących Nginx Zarządzanie ruchem i kontrole bezpieczeństwa. Ale jak zwykle możesz zadawać pytania lub dzielić się przemyśleniami na temat tego przewodnika za pośrednictwem poniższego formularza opinii.

Odniesienie: Przewodnik kontroli bezpieczeństwa na stronie Nginx.