Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Jak skonfigurować ograniczanie liczby żądań w Nginx na Ubuntu

Ograniczanie liczby żądań w Nginx to wbudowana funkcja, która kontroluje, ile żądań HTTP może wysłać klient w określonym czasie. Pozwala ograniczyć szkodliwy ruch kierowany do API, stron logowania i aplikacji intensywnie wykorzystujących zasoby bez instalowania dodatkowego oprogramowania.

W tym poradniku skonfigurujesz limity żądań w Nginx, bezpiecznie je przetestujesz i włączysz ochronę na serwerze Ubuntu.

Jak działa ograniczanie liczby żądań w Nginx?

Nginx używa modułu limit_req do śledzenia przychodzących żądań, zazwyczaj na podstawie adresu IP klienta.

Możesz na przykład ustawić średni limit pięciu żądań na sekundę, dopuszczając jednocześnie krótkotrwałe wzrosty ruchu. Żądania przekraczające dozwolony poziom takiego wzrostu mogą być odrzucane.

Pomaga to zapobiec przeciążeniu aplikacji nadmierną liczbą żądań.

Uwaga: Ograniczanie liczby żądań pomaga łagodzić skutki niektórych ataków HTTP flood na warstwie 7. Nie powstrzyma jednak dużych ataków DDoS na poziomie sieci, które wysycają łącze.

jak skonfigurować ograniczanie liczby żądań w Nginx

Wymagania wstępne

Potrzebujesz serwera Ubuntu z zainstalowanym Nginx, dostępu przez SSH z uprawnieniami sudo oraz istniejącej witryny lub aplikacji.

Przed wprowadzeniem zmian wykonaj kopię zapasową istniejącej konfiguracji witryny.

Krok 1: Zdefiniuj strefę ograniczania liczby żądań

Połącz się z serwerem przez SSH.

W standardowej instalacji Nginx na Ubuntu utwórz nowy plik konfiguracyjny:

sudo nano /etc/nginx/conf.d/rate-limit.conf

Dodaj:

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

Ta konfiguracja wykorzystuje adres IP klienta do śledzenia żądań, przydziela 10 MB na dane służące do ich śledzenia i ustawia średni limit pięciu żądań na sekundę dla każdego adresu IP.

Dyrektywa limit_req_zone musi znajdować się w kontekście http Nginx. Standardowa konfiguracja Ubuntu uwzględnia w tym kontekście pliki z katalogu conf.d.

Zapisz plik.

Krok 2: Włącz ograniczanie liczby żądań dla swojej witryny

Otwórz istniejący plik konfiguracyjny witryny w Nginx:

sudo nano /etc/nginx/sites-available/app.example.com

Zastąp nazwę pliku nazwą swojego pliku konfiguracyjnego.

W przypadku aplikacji HTTP działającej na porcie 3000 chroniony punkt końcowy API może wyglądać tak:

location /api/ {
    limit_req zone=perip burst=10 nodelay;
    limit_req_status 429;
    limit_req_dry_run on;

    proxy_pass http://127.0.0.1:3000;
}

Oto, za co odpowiadają najważniejsze dyrektywy:

  • limit_req: Stosuje wcześniej zdefiniowany limit.
  • burst=10: Dopuszcza krótkotrwały wzrost liczby żądań ponad limit.
  • nodelay: Przetwarza natychmiast żądania dopuszczone w ramach krótkotrwałego wzrostu.
  • limit_req_status 429: Zwraca kod HTTP 429 po odrzuceniu żądań.
  • limit_req_dry_run on: Rejestruje żądania przekraczające limit bez ich blokowania.

Ważne: Dodaj te dyrektywy ograniczania liczby żądań do istniejącego bloku location obsługującego dany adres. Nie twórz zduplikowanych bloków lokalizacji ani nie zastępuj istniejącej konfiguracji serwera zaplecza.

Podane wartości są przykładowe. Dobierz limity na podstawie typowych wzorców żądań w swojej aplikacji.

Krok 3: Sprawdź poprawność konfiguracji Nginx

Sprawdź konfigurację:

sudo nginx -t

Jeśli test zakończy się pomyślnie, przeładuj konfigurację Nginx:

sudo systemctl reload nginx

Jeśli pojawi się błąd, popraw go przed przeładowaniem konfiguracji.

Krok 4: Przetestuj limit liczby żądań

Ponieważ tryb próbny jest włączony, żądania nie będą jeszcze odrzucane.

Monitoruj dziennik błędów Nginx:

sudo tail -f /var/log/nginx/error.log

Z innego terminala wyślij krótką serię żądań testowych do punktu końcowego, który kontrolujesz:

for i in $(seq 1 15); do
  curl -s -o /dev/null -w "%{http_code}\n" \
  https://app.example.com/api/health
done

Zastąp adres URL adresem działającego punktu końcowego we własnej aplikacji testowej lub środowisku przejściowym.

Jeśli żądania przekroczą limit, Nginx powinien zapisać w dzienniku błędów komunikaty zawierające limiting requests, dry run.

Aplikacja powinna nadal zwracać zwykłe odpowiedzi, ponieważ blokowanie żądań nie zostało włączone.

Krok 5: Włącz ograniczanie liczby żądań

Po przeanalizowaniu wyników i upewnieniu się, że limity są odpowiednie, usuń tę dyrektywę z chronionego bloku lokalizacji:

limit_req_dry_run on;

Ponownie sprawdź poprawność konfiguracji i przeładuj ją w Nginx:

sudo nginx -t
sudo systemctl reload nginx

Żądania przekraczające limit mogą teraz otrzymać odpowiedź HTTP 429 Too Many Requests.

Powtórz test w kontrolowanych warunkach i sprawdź kody odpowiedzi. Dokładne wyniki zależą od czasu wysyłania żądań i skonfigurowanych limitów.

Jak cofnąć zmiany

Jeśli zmiany wpływają na uprawnionych użytkowników, przywróć:

limit_req_dry_run on;

Sprawdź poprawność konfiguracji i przeładuj ją w Nginx. Spowoduje to powrót do trybu monitorowania bez odrzucania żądań.

Następnie możesz dostosować limity na podstawie rzeczywistego ruchu.

Ważne: Nginx za Cloudflare lub inną siecią CDN

Gdy Nginx działa za serwerem reverse proxy, widoczny dla niego adres IP klienta może należeć do serwera proxy, a nie do pierwotnego odwiedzającego.

Stosowanie limitów dla poszczególnych adresów IP bez skorygowania tego problemu może spowodować, że niezwiązani ze sobą użytkownicy będą traktowani jako jedna grupa.

Przed włączeniem limitów dla poszczególnych klientów skonfiguruj obsługę zaufanych adresów IP klientów za pomocą modułu Real IP w Nginx oraz zakresów adresów IP udokumentowanych przez dostawcę serwera proxy.

Nigdy nie ufaj nagłówkom z adresami IP podawanym przez dowolnych odwiedzających.

Czy ograniczanie liczby żądań w Nginx zastępuje ochronę przed atakami DDoS?

Nie. Nginx może ograniczać nadmierną liczbę żądań HTTP docierających do aplikacji, ale nie może filtrować ruchu, który już wysycił łącze sieciowe serwera.

Aby uzyskać szerszą ochronę, połącz mechanizmy na poziomie aplikacji z ochroną zapewnianą na poziomie infrastruktury hostingowej.

Często zadawane pytania

Czy ograniczanie liczby żądań w Nginx jest bezpłatne?

Tak. Nginx Open Source zawiera moduł limit_req.

Czy ograniczanie liczby żądań w Nginx może blokować uprawnionych odwiedzających?

Tak. Zbyt rygorystyczne ustawienia mogą powodować odrzucanie prawidłowych żądań, zwłaszcza gdy kilku użytkowników korzysta z tego samego adresu IP. Przetestuj konfigurację w trybie próbnym przed włączeniem blokowania.

Czy ograniczanie liczby żądań w Nginx działa w przypadku API?

Tak. Jest szczególnie przydatne do kontrolowania nadmiernej liczby żądań kierowanych do punktów końcowych API i innych zasobochłonnych ścieżek aplikacji.

Podsumowanie

Nginx ma wbudowaną funkcję ograniczania liczby żądań, która pomaga zmniejszyć szkodliwy ruch HTTP bez konieczności instalowania dodatkowego oprogramowania.

Skonfiguruj limit liczby żądań, przetestuj go w trybie próbnym i włącz blokowanie dopiero po przeanalizowaniu wyników.

Aby zapewnić serwerowi kompleksową ochronę, stosuj ograniczanie liczby żądań wraz z odpowiednimi zabezpieczeniami przed atakami DDoS na wcześniejszych etapach obsługi ruchu.

Table of Content

Serwer proxy odwrotny Nginx odbiera żądania od odwiedzających witrynę i przekazuje je do innego serwera

Błąd 502 Bad Gateway w Nginx zwykle oznacza, że Nginx nie otrzymał prawidłowej odpowiedzi z

Błąd 504 Gateway Timeout występuje, gdy serwer działający jako brama lub serwer proxy nie otrzyma

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Przewijanie do góry