...

Ograniczanie przepustowości w NGINX: skuteczna ochrona przed ruchem generowanym przez boty i atakami

Współczynnik NGINX Limiting zatrzymuje automatyczne zapytania, ogranicza szczytowe obciążenie oraz chroni punkty końcowe logowania, API i formularzy przed botami i atakami. Pokażę Ci, jak zdefiniować limity i zastosować je do Ochrona przed botami wykorzystuje je i na tej podstawie tworzy solidną koncepcję bezpieczeństwa dla stron internetowych o dużym natężeniu ruchu.

Punkty centralne

Istotne Oto główne tezy:

  • Limity stawek ograniczają złośliwe ataki i chronią zasoby backendowe.
  • Burst/bez opóźnienia wyłapują uzasadnione skoki ruchu bez blokowania użytkowników.
  • Strefy rozróżniają ludzi i boty na podstawie różnych limitów.
  • Rejestrowanie dostarcza danych umożliwiających iteracyjne zawężanie limitów.
  • Integracja W połączeniu z WAF, ochroną przed atakami DDoS i monitorowaniem zwiększa to skuteczność.

Dlaczego ograniczanie przepustowości pozwala wcześnie powstrzymać ataki

Atakujący stawiają na wysokie Częstotliwości żądań, w celu nadużywania formularzy logowania, przeciążania interfejsów API lub automatycznego pobierania treści. Dlatego ograniczam liczbę żądań na klucz – zazwyczaj na adres IP – i decyduję, czy je ograniczyć, opóźnić, czy odpowiedzieć kodem 429. W ten sposób chronię procesor, bazę danych i logikę aplikacji przed ruchem botów, przepuszczając jednocześnie legalnych użytkowników. Szczególnie korzystają na tym wrażliwe ścieżki, takie jak /login, /auth, /xmlrpc.php lub wyszukiwania wymagające dużych zasobów. Źródłem tej metody jest Dokumentacja Nginx dotyczące modułu ngx_http_limit_req_module.

Działanie modułu NGINX w praktyce

Moduł działa na zasadzie Nieszczelne wiadroZasada działania: Dla każdego klucza NGINX zapisuje wartości licznika w strefie i porównuje je z dozwoloną częstotliwością. Typowymi kluczami są $binary_remote_addr dla adresów IP, tokeny dla kluczy API lub wartości pochodne ustalone za pomocą mapowania. Jeśli klient trwale przekracza limit częstotliwości i bufor impulsowy, NGINX odrzuca żądanie przed przekazaniem go do backendu. Oszczędza to czas obliczeniowy i zmniejsza opóźnienia dla prawdziwych użytkowników. Jako odpowiedź ustawiam kod 429 Too Many Requests lub, opcjonalnie, inny Kod statusu Um.

Konfiguracja: wyjaśnienie krok po kroku

Zaczynam od strefy w sekcji http, ustalam umiarkowaną częstotliwość i aktywuję ją selektywnie na wrażliwych ścieżkach. W przypadku krótkotrwałych szczytów ruchu definiuję tryb burst, opcjonalnie z opcją nodelay, aby uniknąć nagłych odrzuceń. Następnie przeprowadzam testy w środowisku stagingowym i analizuję logi, zanim wdrożę rozwiązanie do środowiska produkcyjnego. W ten sposób nie ryzykuję niepotrzebnego blokowania prawdziwych użytkowników. Zwięzły przykład ilustruje to Składnia namacalne:

# http {}
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;

server {
  location /api/ {
    limit_req zone=req_limit_per_ip burst=20 nodelay;
    limit_req_status 429;
  }

  location /login {
    limit_req zone=req_limit_per_ip burst=5;
    limit_req_status 429;
  }
}

Ochrona przed botami z wykorzystaniem stref i logiki user-agent

Ograniczenia oparte na adresach IP rzadko wystarczają w przypadku rozproszonych botnetów, dlatego dzielę ruch na Strefy: Użytkownicy otrzymują bardziej liberalne limity, a ogólne roboty indeksujące – bardziej rygorystyczne. Za pomocą mapy oceniam agenty użytkownika, rozpoznaję dozwolone boty, takie jak Googlebot, i przypisuję im własne, ściśle monitorowane limity. W przypadku nieznanych scraperów ustalam surowe ograniczenia na kosztownych ścieżkach. Jeśli zauważę pewne wzorce, dynamicznie zwiększam restrykcje, aż do momentu, gdy Stawka znów mieści się w normie.

Precyzyjne dostrajanie: częstotliwość, seria, brak opóźnienia i kody stanu

Wartość „Rate” reguluje przepustowość na sekundę, „Burst” pozwala na krótkotrwałe buforowanie, a „nodelay” decyduje, czy preferuję buforowanie, czy natychmiastowe przepuszczanie. Zaczynam od umiarkowanych wartości, np. 10r/s z burstem 20 dla interfejsów API, a następnie dostosowuję ustawienia na podstawie analizy logów. W przypadku tras logowania ustawiam np. 1r/s z małym burstem, aby spowolnić ataki typu brute force. W przypadku przekroczenia limitów zwracam kod 429, ponieważ klienci dzięki temu radzić sobie i logika ponownej próby działa prawidłowo. W szczególnych przypadkach stosuję alternatywne kody, jeśli klienci tego wymagają.

Przegląd w tabeli: dyrektywy i zastosowanie

Poniżej Tabela podsumowuje najważniejsze wytyczne i wskazuje, w jakich sytuacjach warto z nich korzystać.

dyrektywa Efekt Przykład Typowe zastosowanie
limit_req_zone Wprowadź klucz, strefę i Stawka mocno limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; Podstawa na adres IP, token lub user-agent
limit_req Włącza limit w Lokalizacja/Serwer limit_req zone=perip burst=20 nodelay; Precyzyjna kontrola dla każdej ścieżki lub vHost
limit_req_status Dodaje kod HTTP Przekroczenie limit_req_status 429; Prawidłowe zachowanie klienta i ponowne próby
mapa Przekierowuje żądania do Strefy na stronie map $http_user_agent $is_bot {…} Rozróżnienie między botem a człowiekiem na podstawie agenta użytkownika

W praktyce: celowe zabezpieczenie punktu końcowego logowania

Bardzo rygorystycznie ograniczam liczbę prób logowania, ponieważ boty próbują odgadnąć hasła o wysokim Częstotliwość wypróbować różne opcje. 1 żądanie na sekundę z burst 3 zapobiega masowemu zgadywaniu haseł, nie utrudniając przy tym zbytnio dostępu prawdziwym użytkownikom. Dodatkowo rejestruję powtarzające się nieudane próby w logu, aby tymczasowo blokować adresy IP. W połączeniu z uwierzytelnianiem dwuskładnikowym (2FA) i opcjonalnym captcha znacznie zmniejsza się obciążenie bazy danych i obsługi sesji. W ten sposób ograniczam liczbę nieudanych prób i zapewniam Dostęp gotowy do pracy.

W praktyce: sprawiedliwe i kontrolowane udostępnianie interfejsów API

Interfejsy API wymagają jasnych Szanse, aby poszczególni klienci nie zajmowali całej przepustowości. W przypadku ogólnych tras ustawiam 10 żądań na sekundę (r/s) i 20 w trybie burst, a dla kosztownych punktów końcowych stosuję bardziej restrykcyjne wartości. Jeśli dostępne są tokeny lub klucze API, ograniczam dostęp na token, a nie na adres IP. Zapewnia to sprawiedliwość między klientami i zapobiega nadużyciom. Bardziej szczegółowe informacje można znaleźć w mojej notatce na temat Ograniczanie liczby wywołań API, które szerzej kontekstualizuje tę koncepcję.

Monitorowanie, rejestrowanie i iteracyjne dopracowywanie

Rejestruję odpowiedzi 429 wraz z Klucz (np. adres IP lub token) oraz ścieżkę, aby rozpoznać wzorce. Skoki aktywności na niewielkiej liczbie ścieżek wskazują na scraping lub ataki typu brute force; rozłożone obciążenie sugeruje obecność botnetów. Korzystając z tych danych, ustalam limity tylko tam, gdzie jest to konieczne, i minimalizuję liczbę fałszywych alarmów. Pulpity nawigacyjne z danymi dotyczącymi częstotliwości, wskaźnika błędów i opóźnień pokazują mi skutki każdej zmiany. W ten sposób zachowuję Wydajność wysoki, podczas gdy poziom ochrony wzrasta.

Włączenie do całościowej koncepcji ochrony

Uważam, że ograniczenie częstotliwości jest mocnym pierwszym krokiem warstwa, ale łączę to z regułami WAF, oceną reputacji adresów IP oraz wzmocnieniem zabezpieczeń TLS. W przypadku ataków opartych na dużym natężeniu ruchu pomocna jest wstępna ochrona przed atakami DDoS, która filtruje ruch na poziomie sieci, zanim NGINX będzie musiał podjąć działanie. Na bieżąco monitoruję wskaźniki, konfiguruję alerty na nietypowe skoki i reaguję aktualizacją reguł. W ten sposób z kilku elementów powstaje solidna sieć ochronna. Praktyczny przegląd zapewniają te Strategie przeciwdziałania atakom DDoS.

Konkretne wzorce konfiguracji dla botów a ludzie

Za pomocą funkcji map dzielę odwiedzających na kategorie i kieruję ich do osobnych Strefy. Znane roboty indeksujące otrzymują umiarkowane limity, a generyczne agenty – bardziej rygorystyczne. W przypadku ścieżek takich jak /search czy /report stosuję surowsze ograniczenia, ponieważ zajmują one dużo mocy obliczeniowej procesora. W przypadku powtarzających się naruszeń nie zwiększam limitów, lecz blokuję dostęp na określony czas lub przekazuję sprawdzanie do modułu wykrywającego boty. W ten sposób Wskaźnik nadużyć niski, bez zakłócania działania wyszukiwarek.

Przykład: Dwie strefy i mapowanie agentów użytkownika

Poniższy fragment przedstawia podział według Agent użytkownika oraz przypisanie odpowiednich limitów. Łączę to ze zróżnicowanymi kodami statusu i polami logowania, aby dokładnie zmierzyć efekt. Boty z ogólnym agentem trafiają do strefy o surowych ograniczeniach. Ludzie lub zweryfikowane roboty indeksujące korzystają ze strefy o łagodniejszych ograniczeniach. Takie podejście zapewnia przewidywalne Przepustowość na klasę:

map $http_user_agent $is_bot {
  default 0;
  "~*googlebot"     0;
  "~*bingbot" 0;
  "~*crawler|scraper|bot" 1;
}

limit_req_zone $binary_remote_addr zone=human:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=bot:10m   rate=1r/s;

server {
  location / {
    if ($is_bot) {
 limit_req zone=bot burst=5;
    }
    if ($is_bot = 0) {
 limit_req zone=human burst=20 nodelay;
    }
    limit_req_status 429;
  }
}

Obsługa błędów: prawidłowe zgłaszanie błędu 429

W przypadku limitów podaję jasną Odpowiedź z informacją, kiedy warto podjąć kolejną próbę. W przypadku interfejsów API należy podać prawidłowy nagłówek „Retry-After”, aby klienci stosowali algorytm „backoff”. Użytkownicy otrzymują krótkie wyjaśnienie bez szczegółów technicznych. Zmniejsza to liczbę zgłoszeń i zapewnia zrozumiałe działanie systemu. Przejrzysta UX sprawia, że ograniczenia stają się akceptowalne i zapobiega frustracji.

Dostawca usług hostingowych, sieć i jądro: wzmocnienie podstaw

Duży ruch legalny i środki ochronne wymagają niezawodnych Zasoby oraz sensowne ustawienia domyślne na poziomie sieci. Zwracam uwagę na aktualne wersje NGINX, wystarczającą ilość pamięci RAM dla stref oraz funkcje zabezpieczające przed atakami transportowymi. W przypadku ataków typu SYN-Flood pomocne jest włączenie Pliki cookie TCP SYN w jądrze systemu, aby połączenia nie utknęły. Podsumowując, odciąża to NGINX od zbędnego obciążenia. W ten sposób skupiam ograniczenia na warstwach HTTP i utrzymuję Przepustowość stabilny.

Krótkie podsumowanie: oto jak skutecznie wykorzystuję ograniczenie przepustowości w NGINX

Ograniczam liczbę zapytań na klucz, izoluję ścieżki krytyczne i utrzymuję boty na dystans dzięki ścisłym strefom. Funkcje Burst i nodelay pomagają dopuszczać uzasadnione szczyty ruchu bez sprzyjania nadużyciom. Na podstawie 429 logów na bieżąco kalibruję wartości i zaostrzam limity tylko tam, gdzie jest to konieczne. W połączeniu z WAF, ochroną przed atakami DDoS, monitorowaniem i wzmocnieniem jądra powstaje solidna koncepcja ochrony. Kto konsekwentnie ją wdraża, znacznie ogranicza ruch botów i chroni Wydajność nawet pod obciążeniem.

Elementy, których często brakuje w praktyce

W wielu konfiguracjach brakuje kilku kluczowych elementów, które znacznie zwiększają skuteczność ograniczania przepustowości:

  • Rzeczywisty adres IP klienta za serwerami proxy: Bez prawidłowej obsługi rzeczywistych adresów IP serwer NGINX często ogranicza adres IP urządzenia równoważącego obciążenie – ograniczenia te dotyczą wówczas wszystkich użytkowników zgrupowanych za tym urządzeniem.
  • Testy na sucho (Dry-Run): Limity są aktywowane „na ślepo“. Lepiej jest najpierw tylko zarejestrować, ile razy limit ten zadziałałby.
  • Klucze o drobnym ziarnie: Zamiast ograniczać dostęp wyłącznie na podstawie adresu IP, warto wprowadzić limity na token API, sesję lub użytkownika, aby zapewnić większą sprawiedliwość.
  • Współdziałanie z limit_conn: Równoległe połączenia i częstotliwości żądań odzwierciedlają różne wzorce nadużyć.
  • Szczególne wyjątki: Kontrole stanu, webhooki lub usługi wewnętrzne często wymagają mniej restrykcyjnych limitów lub nie wymagają ich wcale.

Proxy odwrotne: bezpieczna analiza rzeczywistego adresu IP klienta

Jeśli NGINX znajduje się za modułem równoważenia obciążenia, ustawiam dyrektywy Real-IP, aby $binary_remote_addr odzwierciedlał rzeczywistego klienta. Ufam wyłącznie sieciom, które należą do mnie, i włączam rekurencyjną interpretację:

http {
  # Zaufane zakresy adresów IP serwerów proxy (przykład)
  set_real_ip_from 10.0.0.0/8;
  set_real_ip_from 192.168.0.0/16;
  # w razie potrzeby uzupełnij o publiczne zakresy LB/CDN

  real_ip_header X-Forwarded-For;
  real_ip_recursive on;

  limit_req_zone $binary_remote_addr zone=perip:20m rate=10r/s;
}

Bez tego ustawienia limit dotknąłby w przeciwnym razie wielu niewinnych użytkowników jednocześnie. Po skonfigurowaniu sprawdzam w logach dostępu, czy pojawia się oczekiwany adres IP klienta.

Strategia kluczowa: IP, użytkownik, token i ścieżka

Wybrany klucz decyduje o sprawiedliwości i skuteczności. Kilka sprawdzonych wzorów:

  • Pro IP ($binary_remote_addr): Szybkie wdrożenie, dobrze sprawdza się w przypadku /login i anonimowych punktów końcowych.
  • Na token API: Równość między klientami; chroni przed wiązaniem NAT. Wyodrębniam tokeny za pomocą map.
  • Na każdą klasę ścieżki: Należy osobno ograniczyć kosztowne punkty końcowe, np. /search w większym stopniu niż /status.
map $http_authorization $api_token {
  default "";
  "~*^Bearer\s+(.+)$" $1;
}

limit_req_zone $api_token zone=per_token:30m rate=5r/s;

server {
  location /api/ {
    # Ma znaczenie tylko wtedy, gdy token jest dostępny
    limit_req zone=per_token burst=10;
    limit_req_status 429;
  }
}

Ważne: Wysoka kardynalność klucza zużywa pamięć w strefie. Należy przewidzieć bufory i monitorować zajętość pamięci.

Pamięć i wymiarowanie stref

Strefa przechowuje metadane dla każdego aktywnego klucza. Zużycie na jeden wpis wynosi kilkadziesiąt bajtów plus nadmiar. Na tej podstawie wnioskuję, że:

  • W przypadku dużej liczby jednoczesnych adresów IP/tokenów wybieram większe strefy, np. 50–100 MB.
  • Zaczynam raczej ostrożnie i przeglądam logi NGINX: komunikat „shared memory zone is full“ oznacza konieczność ponownego dostrojenia.
  • Niewykorzystane klucze tracą ważność po krótkim okresie bezczynności; wartości szczytowe są ważniejsze niż średnia dzienna.

Precyzyjne stosowanie trybu Burst i nodelay

Bez bez opóźnienia NGINX porządkuje przekroczenia w ramach bufora impulsowego i opóźniony Żądania. Z bez opóźnienia Dopuszczalne żądania seryjne są natychmiast przepuszczane, a nadwyżki odrzucane. Moje postępowanie:

  • Ścieżki interaktywne (HTML): raczej bez atrybutu `nodelay`, aby generować krótkie czasy oczekiwania zamiast twardych błędów 429.
  • Interfejsy API: często z opcją „nodelay”, aby klienci otrzymywali wyraźny kod stanu 429 i stosowali algorytm backoff.
  • Drogie urządzenia końcowe: niewielka seria impulsów w celu wygładzenia skoków obciążenia po stronie serwera.

Próba generalna, poziom logowania i analiza

Zanim włączę limity, uruchamiam tryb Dry-Run i dostosowuję poziom logowania. W ten sposób mogę sprawdzić efekt bez ryzyka:

server {
  location /api/ {
    limit_req zone=perip burst=20;
    limit_req_dry_run on; # tylko rejestrować, nie blokować
    limit_req_log_level notice;  # mniej poważny niż 'error'
  }
}

Następnie analizuję dane o dostępie z ostatnich 3–7 dni, identyfikuję punkty o największym natężeniu ruchu, dostosowuję parametry rate/burst i dopiero wtedy wyłączam tryb Dry-Run.

429 – prawidłowy transport: HTML, JSON i Retry-After

Aby zapewnić dobry UX, rozróżniam przeglądarki i klienty API oraz stosuję Retry‑After. Oto jak jasno komunikuję granice:

map $http_accept $wants_json {
  default 0;
  "~*application/json|/json"    1;
}

server {
  error_page 429 = @rate_limited;

  location @rate_limited {
    add_header Retry-After 2 always;
    if ($wants_json) {
 add_header Content-Type application/json;
      return 429 '{"error":"too_many_requests","retry_after":2}';
    }
    return 429 "Proszę spróbować ponownie później.";
  }
}

Interfejsy API mogą w ten sposób reagować programowo, a użytkownicy otrzymują zrozumiały komunikat.

Połączenie limit_req i limit_conn

limit_req przeładunek w danym przedziale czasowym, limit_conn ogranicza liczbę jednoczesnych połączeń. Aby zapobiegać pobieraniu plików, aktywności klientom typu „chatty” lub zalewom HTTP/2, stosuję połączenie obu rozwiązań:

limit_conn_zone $binary_remote_addr zone=perip_conn:10m;

server {
  location /api/ {
    limit_req  zone=perip burst=20 nodelay;
    limit_conn zone=perip_conn 20;  # maks. 20 jednoczesnych połączeń na adres IP
  }
}

W ten sposób zapobiegam sytuacji, w której niewielka liczba klientów wprawdzie przestrzega limitu, ale zajmuje zasoby zbyt dużą liczbą równoległych połączeń.

Wyjątki, kontrole stanu i trasy wewnętrzne

Nie każda ścieżka wymaga ograniczeń. Kontrole stanu (/healthz), wewnętrzne webhooki lub wywołania zwrotne płatności otrzymują własne lokalizacje bez parametru `limit_req` – lub z mniej restrykcyjnymi wartościami:

server {
  # brak limitów dla testów sprawności
  location = /healthz { return 200 "ok"; }

  # łagodne limity dla wywołań zwrotnych związanych z płatnościami
  location /webhooks/pay/ {
    limit_req zone=perip burst=5;
  }

  # ścisła ochrona logowania
  location = /login {
    limit_req zone=perip rate=1r/s burst=3;
  }
}

Wyjątki na poziomie szczegółowym ograniczają liczbę fałszywych alarmów i zapewniają stabilność integracji.

Bardziej niezawodne routingowanie strefowe bez „magii” instrukcji IF

Jeśli chodzi o rozróżnienie „bot a człowiek“, preferuję wewnętrzne przekierowania za pomocą nazwanych lokalizacji. Dzięki temu konfiguracja jest przejrzysta i przewidywalna:

map $http_user_agent $is_bot {
  default 0;
  "~*googlebot|bingbot" 0;
  "~*crawler|scraper|bot" 1;
}

limit_req_zone $binary_remote_addr zone=human:20m rate=10r/s;
limit_req_zone $binary_remote_addr zone=bot:10m   rate=1r/s;

server {
  error_page 418 = @bot;

  location / {
    if ($is_bot) { return 418; }   # wewnętrzne przekierowanie
    limit_req zone=human burst=20 nodelay;
    limit_req_status 429;
    try_files $uri $uri/ /index.html;
  }

  location @bot {
    limit_req zone=bot burst=5;
    limit_req_status 429;
  }
}

W ten sposób boty trafiają w sposób deterministyczny do strefy surowej, a ludzie do strefy swobodnej – przy czym oba ograniczenia nie działają jednocześnie.

Testowanie, mierzenie, przymierzanie: praktyczny przebieg czynności

  • Inscenizacja: Wybierz konserwatywne ustawienia częstotliwości/serii, włącz tryb Dry-Run, przeprowadź test obciążenia syntetycznego na ścieżce krytycznej.
  • Testy dymu: Generowanie krótkich serii za pomocą curl lub Lasttools i sprawdzanie zachowania kodu 429/opóźnienia.
  • Program pilotażowy dotyczący wydajności: Najpierw zastosować w poszczególnych lokalizacjach, uważnie monitorować logi.
  • Ostrzenie iteracyjne: Należy ustalać limity tylko tam, gdzie pojawiają się wzorce; należy zminimalizować liczbę fałszywych alarmów.
Przykład #: szybki test seryjny za pomocą curl
for i in {1..50}; do curl -s -o /dev/null -w "%{http_code}\n" https://example.com/login & done; wait

Częstotliwość w minutach zamiast w sekundach i szczegółowe ścieżki

NGINX pozwala na ustawianie częstotliwości w sekundach lub minutach (r/s, r/m). W przypadku nadużyć związanych z logowaniem często ustawiam limit 60r/m zamiast 1r/s, aby zezwolić na krótkie, uzasadnione podwójne kliknięcia, ale ograniczyć ciągłe kliknięcia. Drogie ścieżki mają węższe limity niż tanie. Przykład:

limit_req_zone $binary_remote_addr zone=perip_min:20m rate=60r/m;

server {
  location /search/ {
    limit_req zone=perip_min burst=10;   # bardziej rygorystyczne
  }
  location /status {
    # brak limitu – tania opcja, wykorzystywana wewnętrznie
    return 200;
  }
}

Pułapki i jak ich unikać

  • Niewłaściwy klucz: W przypadku serwerów proxy bez prawdziwego adresu IP nieumyślnie ograniczam dostęp wszystkim użytkownikom jednocześnie.
  • Zbyt małe strefy: Komunikat „zone is full“ powoduje nieprzewidywalne zachowanie – należy zapewnić odpowiednią rezerwę.
  • Limit na wszystko: Różne ścieżki wymagają różnych wartości; uniwersalne podejście powoduje frustrację.
  • Brak monitorowania: Bez analizy 429 nieprawidłowe konfiguracje pozostają niezauważone.
  • Lista ponad-biała: Zbyt szerokie wyjątki otwierają furtkę – należy tworzyć białe listy w sposób ukierunkowany, tymczasowy i przejrzysty.

Szczególne cechy protokołu HTTP/2, SSE i buforowania

HTTP/2 łączy żądania w kilka połączeń; limit_conn nadal ma to znaczenie, ponieważ strumienie zużywają zasoby. Zdarzenia wysyłane przez serwer (Server-Sent Events) lub długie pobieranie rzadko powodują przekroczenie limitów przepustowości (niewiele żądań), ale pochłaniają czas – w takich przypadkach ograniczam liczbę równoległych połączeń za pomocą `limit_conn` lub stosuję strategie zarządzania przepustowością. Tam, gdzie to możliwe, odciążam system za pomocą Buforowanie (np. zasoby statyczne, częste żądania GET), dzięki czemu limity będą rzadziej się uruchamiać, a użytkownicy będą otrzymywać szybsze odpowiedzi.

Lista kontrolna operacyjna

  • Prawidłowy adres Real-IP, zdefiniowane klucze (IP/token/użytkownik)
  • Strefy o dużych rozmiarach, dostępne wskaźniki i logi
  • szybkość/seria dostosowana do klasy ścieżki, celowo ustawiono opcję „nodelay”
  • Przeprowadzono test na sucho, zaimplementowano komunikację 429 (Retry-After)
  • Wyjątki dotyczące Health/Webhooks, połączenie z limit_conn
  • Iteracyjne dostrajanie i powiadamianie o anomaliach

Artykuły bieżące

Serwer Linux z wizualizacją wskaźników dotyczących zjawiska „pressure stall” w centrum danych
Administracja

Linux PSI do precyzyjnej analizy wydajności i monitorowania

Linux PSI (Pressure Stall Information) pokazuje, w jakim stopniu procesor, pamięć i operacje wejścia/wyjścia spowalniają działanie systemu. Dowiedz się, jak włączyć PSI i wykorzystać je do precyzyjnego monitorowania wydajności.