{"id":21255,"date":"2026-09-02T08:35:33","date_gmt":"2026-09-02T06:35:33","guid":{"rendered":"https:\/\/webhosting.de\/nginx-rate-limiting-schutz-vor-bot-traffic-angriffen-secure\/"},"modified":"2026-09-02T08:35:33","modified_gmt":"2026-09-02T06:35:33","slug":"ograniczanie-przepustowosci-w-nginx-ochrona-przed-atakami-botow-bezpieczenstwo","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/nginx-rate-limiting-schutz-vor-bot-traffic-angriffen-secure\/","title":{"rendered":"Ograniczanie przepustowo\u015bci w NGINX: skuteczna ochrona przed ruchem generowanym przez boty i atakami"},"content":{"rendered":"<p><strong>Wsp\u00f3\u0142czynnik NGINX<\/strong> Limiting zatrzymuje automatyczne zapytania, ogranicza szczytowe obci\u0105\u017cenie oraz chroni punkty ko\u0144cowe logowania, API i formularzy przed botami i atakami. Poka\u017c\u0119 Ci, jak zdefiniowa\u0107 limity i zastosowa\u0107 je do <strong>Ochrona przed botami<\/strong> wykorzystuje je i na tej podstawie tworzy solidn\u0105 koncepcj\u0119 bezpiecze\u0144stwa dla stron internetowych o du\u017cym nat\u0119\u017ceniu ruchu.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<p><strong>Istotne<\/strong> Oto g\u0142\u00f3wne tezy:<\/p>\n<ul>\n  <li><strong>Limity stawek<\/strong> ograniczaj\u0105 z\u0142o\u015bliwe ataki i chroni\u0105 zasoby backendowe.<\/li>\n  <li><strong>Burst\/bez op\u00f3\u017anienia<\/strong> wy\u0142apuj\u0105 uzasadnione skoki ruchu bez blokowania u\u017cytkownik\u00f3w.<\/li>\n  <li><strong>Strefy<\/strong> rozr\u00f3\u017cniaj\u0105 ludzi i boty na podstawie r\u00f3\u017cnych limit\u00f3w.<\/li>\n  <li><strong>Rejestrowanie<\/strong> dostarcza danych umo\u017cliwiaj\u0105cych iteracyjne zaw\u0119\u017canie limit\u00f3w.<\/li>\n  <li><strong>Integracja<\/strong> W po\u0142\u0105czeniu z WAF, ochron\u0105 przed atakami DDoS i monitorowaniem zwi\u0119ksza to skuteczno\u015b\u0107.<\/li>\n<\/ul>\n\n<h2>Dlaczego ograniczanie przepustowo\u015bci pozwala wcze\u015bnie powstrzyma\u0107 ataki<\/h2>\n\n<p>Atakuj\u0105cy stawiaj\u0105 na wysokie <strong>Cz\u0119stotliwo\u015bci \u017c\u0105da\u0144<\/strong>, w celu nadu\u017cywania formularzy logowania, przeci\u0105\u017cania interfejs\u00f3w API lub automatycznego pobierania tre\u015bci. Dlatego ograniczam liczb\u0119 \u017c\u0105da\u0144 na klucz \u2013 zazwyczaj na adres IP \u2013 i decyduj\u0119, czy je ograniczy\u0107, op\u00f3\u017ani\u0107, czy odpowiedzie\u0107 kodem 429. W ten spos\u00f3b chroni\u0119 procesor, baz\u0119 danych i logik\u0119 aplikacji przed ruchem bot\u00f3w, przepuszczaj\u0105c jednocze\u015bnie legalnych u\u017cytkownik\u00f3w. Szczeg\u00f3lnie korzystaj\u0105 na tym wra\u017cliwe \u015bcie\u017cki, takie jak \/login, \/auth, \/xmlrpc.php lub wyszukiwania wymagaj\u0105ce du\u017cych zasob\u00f3w. \u0179r\u00f3d\u0142em tej metody jest <strong>Dokumentacja Nginx<\/strong> dotycz\u0105ce modu\u0142u ngx_http_limit_req_module.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/nginx-rate-limiting-rechenzentrum-4738.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Dzia\u0142anie modu\u0142u NGINX w praktyce<\/h2>\n\n<p>Modu\u0142 dzia\u0142a na zasadzie <strong>Nieszczelne wiadro<\/strong>Zasada dzia\u0142ania: Dla ka\u017cdego klucza NGINX zapisuje warto\u015bci licznika w strefie i por\u00f3wnuje je z dozwolon\u0105 cz\u0119stotliwo\u015bci\u0105. Typowymi kluczami s\u0105 $binary_remote_addr dla adres\u00f3w IP, tokeny dla kluczy API lub warto\u015bci pochodne ustalone za pomoc\u0105 mapowania. Je\u015bli klient trwale przekracza limit cz\u0119stotliwo\u015bci i bufor impulsowy, NGINX odrzuca \u017c\u0105danie przed przekazaniem go do backendu. Oszcz\u0119dza to czas obliczeniowy i zmniejsza op\u00f3\u017anienia dla prawdziwych u\u017cytkownik\u00f3w. Jako odpowied\u017a ustawiam kod 429 Too Many Requests lub, opcjonalnie, inny <strong>Kod statusu<\/strong> Um.<\/p>\n\n<h2>Konfiguracja: wyja\u015bnienie krok po kroku<\/h2>\n\n<p>Zaczynam od strefy w sekcji http, ustalam umiarkowan\u0105 cz\u0119stotliwo\u015b\u0107 i aktywuj\u0119 j\u0105 selektywnie na wra\u017cliwych \u015bcie\u017ckach. W przypadku kr\u00f3tkotrwa\u0142ych szczyt\u00f3w ruchu definiuj\u0119 tryb burst, opcjonalnie z opcj\u0105 nodelay, aby unikn\u0105\u0107 nag\u0142ych odrzuce\u0144. Nast\u0119pnie przeprowadzam testy w \u015brodowisku stagingowym i analizuj\u0119 logi, zanim wdro\u017c\u0119 rozwi\u0105zanie do \u015brodowiska produkcyjnego. W ten spos\u00f3b nie ryzykuj\u0119 niepotrzebnego blokowania prawdziwych u\u017cytkownik\u00f3w. Zwi\u0119z\u0142y przyk\u0142ad ilustruje to <strong>Sk\u0142adnia<\/strong> namacalne:<\/p>\n\n<pre><code># http {}\nlimit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r\/s;\n\nserver {\n  location \/api\/ {\n    limit_req zone=req_limit_per_ip burst=20 nodelay;\n    limit_req_status 429;\n  }\n\n  location \/login {\n    limit_req zone=req_limit_per_ip burst=5;\n    limit_req_status 429;\n  }\n}\n<\/code><\/pre>\n\n<h2>Ochrona przed botami z wykorzystaniem stref i logiki user-agent<\/h2>\n\n<p>Ograniczenia oparte na adresach IP rzadko wystarczaj\u0105 w przypadku rozproszonych botnet\u00f3w, dlatego dziel\u0119 ruch na <strong>Strefy<\/strong>: U\u017cytkownicy otrzymuj\u0105 bardziej liberalne limity, a og\u00f3lne roboty indeksuj\u0105ce \u2013 bardziej rygorystyczne. Za pomoc\u0105 mapy oceniam agenty u\u017cytkownika, rozpoznaj\u0119 dozwolone boty, takie jak Googlebot, i przypisuj\u0119 im w\u0142asne, \u015bci\u015ble monitorowane limity. W przypadku nieznanych scraper\u00f3w ustalam surowe ograniczenia na kosztownych \u015bcie\u017ckach. Je\u015bli zauwa\u017c\u0119 pewne wzorce, dynamicznie zwi\u0119kszam restrykcje, a\u017c do momentu, gdy <strong>Stawka<\/strong> zn\u00f3w mie\u015bci si\u0119 w normie.<\/p>\n\n<h2>Precyzyjne dostrajanie: cz\u0119stotliwo\u015b\u0107, seria, brak op\u00f3\u017anienia i kody stanu<\/h2>\n\n<p>Warto\u015b\u0107 \u201eRate\u201d reguluje przepustowo\u015b\u0107 na sekund\u0119, \u201eBurst\u201d pozwala na kr\u00f3tkotrwa\u0142e buforowanie, a \u201enodelay\u201d decyduje, czy preferuj\u0119 buforowanie, czy natychmiastowe przepuszczanie. Zaczynam od umiarkowanych warto\u015bci, np. 10r\/s z burstem 20 dla interfejs\u00f3w API, a nast\u0119pnie dostosowuj\u0119 ustawienia na podstawie analizy log\u00f3w. W przypadku tras logowania ustawiam np. 1r\/s z ma\u0142ym burstem, aby spowolni\u0107 ataki typu brute force. W przypadku przekroczenia limit\u00f3w zwracam kod 429, poniewa\u017c klienci dzi\u0119ki temu <strong>radzi\u0107 sobie<\/strong> i logika ponownej pr\u00f3by dzia\u0142a prawid\u0142owo. W szczeg\u00f3lnych przypadkach stosuj\u0119 alternatywne kody, je\u015bli klienci tego wymagaj\u0105.<\/p>\n\n<h2>Przegl\u0105d w tabeli: dyrektywy i zastosowanie<\/h2>\n\n<p>Poni\u017cej <strong>Tabela<\/strong> podsumowuje najwa\u017cniejsze wytyczne i wskazuje, w jakich sytuacjach warto z nich korzysta\u0107.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>dyrektywa<\/th>\n      <th>Efekt<\/th>\n      <th>Przyk\u0142ad<\/th>\n      <th>Typowe zastosowanie<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>limit_req_zone<\/td>\n      <td>Wprowad\u017a klucz, stref\u0119 i <strong>Stawka<\/strong> mocno<\/td>\n      <td>limit_req_zone $binary_remote_addr zone=perip:10m rate=10r\/s;<\/td>\n      <td>Podstawa na adres IP, token lub user-agent<\/td>\n    <\/tr>\n    <tr>\n      <td>limit_req<\/td>\n      <td>W\u0142\u0105cza limit w <strong>Lokalizacja<\/strong>\/Serwer<\/td>\n      <td>limit_req zone=perip burst=20 nodelay;<\/td>\n      <td>Precyzyjna kontrola dla ka\u017cdej \u015bcie\u017cki lub vHost<\/td>\n    <\/tr>\n    <tr>\n      <td>limit_req_status<\/td>\n      <td>Dodaje kod HTTP <strong>Przekroczenie<\/strong><\/td>\n      <td>limit_req_status 429;<\/td>\n      <td>Prawid\u0142owe zachowanie klienta i ponowne pr\u00f3by<\/td>\n    <\/tr>\n    <tr>\n      <td>mapa<\/td>\n      <td>Przekierowuje \u017c\u0105dania do <strong>Strefy<\/strong> na stronie<\/td>\n      <td>map $http_user_agent $is_bot {\u2026}<\/td>\n      <td>Rozr\u00f3\u017cnienie mi\u0119dzy botem a cz\u0142owiekiem na podstawie agenta u\u017cytkownika<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/NGINXLimitingMeeting1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>W praktyce: celowe zabezpieczenie punktu ko\u0144cowego logowania<\/h2>\n\n<p>Bardzo rygorystycznie ograniczam liczb\u0119 pr\u00f3b logowania, poniewa\u017c boty pr\u00f3buj\u0105 odgadn\u0105\u0107 has\u0142a o wysokim <strong>Cz\u0119stotliwo\u015b\u0107<\/strong> wypr\u00f3bowa\u0107 r\u00f3\u017cne opcje. 1 \u017c\u0105danie na sekund\u0119 z burst 3 zapobiega masowemu zgadywaniu hase\u0142, nie utrudniaj\u0105c przy tym zbytnio dost\u0119pu prawdziwym u\u017cytkownikom. Dodatkowo rejestruj\u0119 powtarzaj\u0105ce si\u0119 nieudane pr\u00f3by w logu, aby tymczasowo blokowa\u0107 adresy IP. W po\u0142\u0105czeniu z uwierzytelnianiem dwusk\u0142adnikowym (2FA) i opcjonalnym captcha znacznie zmniejsza si\u0119 obci\u0105\u017cenie bazy danych i obs\u0142ugi sesji. W ten spos\u00f3b ograniczam liczb\u0119 nieudanych pr\u00f3b i zapewniam <strong>Dost\u0119p<\/strong> gotowy do pracy.<\/p>\n\n<h2>W praktyce: sprawiedliwe i kontrolowane udost\u0119pnianie interfejs\u00f3w API<\/h2>\n\n<p>Interfejsy API wymagaj\u0105 jasnych <strong>Szanse<\/strong>, aby poszczeg\u00f3lni klienci nie zajmowali ca\u0142ej przepustowo\u015bci. W przypadku og\u00f3lnych tras ustawiam 10 \u017c\u0105da\u0144 na sekund\u0119 (r\/s) i 20 w trybie burst, a dla kosztownych punkt\u00f3w ko\u0144cowych stosuj\u0119 bardziej restrykcyjne warto\u015bci. Je\u015bli dost\u0119pne s\u0105 tokeny lub klucze API, ograniczam dost\u0119p na token, a nie na adres IP. Zapewnia to sprawiedliwo\u015b\u0107 mi\u0119dzy klientami i zapobiega nadu\u017cyciom. Bardziej szczeg\u00f3\u0142owe informacje mo\u017cna znale\u017a\u0107 w mojej notatce na temat <a href=\"https:\/\/webhosting.de\/pl\/api-rate-limiting-hosting-ochrona-przed-naduzyciami-bezpieczenstwo\/\">Ograniczanie liczby wywo\u0142a\u0144 API<\/a>, kt\u00f3re szerzej kontekstualizuje t\u0119 koncepcj\u0119.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/nginx-rate-limiting-security-5721.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitorowanie, rejestrowanie i iteracyjne dopracowywanie<\/h2>\n\n<p>Rejestruj\u0119 odpowiedzi 429 wraz z <strong>Klucz<\/strong> (np. adres IP lub token) oraz \u015bcie\u017ck\u0119, aby rozpozna\u0107 wzorce. Skoki aktywno\u015bci na niewielkiej liczbie \u015bcie\u017cek wskazuj\u0105 na scraping lub ataki typu brute force; roz\u0142o\u017cone obci\u0105\u017cenie sugeruje obecno\u015b\u0107 botnet\u00f3w. Korzystaj\u0105c z tych danych, ustalam limity tylko tam, gdzie jest to konieczne, i minimalizuj\u0119 liczb\u0119 fa\u0142szywych alarm\u00f3w. Pulpity nawigacyjne z danymi dotycz\u0105cymi cz\u0119stotliwo\u015bci, wska\u017anika b\u0142\u0119d\u00f3w i op\u00f3\u017anie\u0144 pokazuj\u0105 mi skutki ka\u017cdej zmiany. W ten spos\u00f3b zachowuj\u0119 <strong>Wydajno\u015b\u0107<\/strong> wysoki, podczas gdy poziom ochrony wzrasta.<\/p>\n\n<h2>W\u0142\u0105czenie do ca\u0142o\u015bciowej koncepcji ochrony<\/h2>\n\n<p>Uwa\u017cam, \u017ce ograniczenie cz\u0119stotliwo\u015bci jest mocnym pierwszym krokiem <strong>warstwa<\/strong>, ale \u0142\u0105cz\u0119 to z regu\u0142ami WAF, ocen\u0105 reputacji adres\u00f3w IP oraz wzmocnieniem zabezpiecze\u0144 TLS. W przypadku atak\u00f3w opartych na du\u017cym nat\u0119\u017ceniu ruchu pomocna jest wst\u0119pna ochrona przed atakami DDoS, kt\u00f3ra filtruje ruch na poziomie sieci, zanim NGINX b\u0119dzie musia\u0142 podj\u0105\u0107 dzia\u0142anie. Na bie\u017c\u0105co monitoruj\u0119 wska\u017aniki, konfiguruj\u0119 alerty na nietypowe skoki i reaguj\u0119 aktualizacj\u0105 regu\u0142. W ten spos\u00f3b z kilku element\u00f3w powstaje solidna sie\u0107 ochronna. Praktyczny przegl\u0105d zapewniaj\u0105 te <a href=\"https:\/\/webhosting.de\/pl\/lagodzenie-skutkow-ddos-strategie-webhostingu-ochrona-sieci\/\">Strategie przeciwdzia\u0142ania atakom DDoS<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/nginx_schutz_tech_office_6352.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Konkretne wzorce konfiguracji dla bot\u00f3w a ludzie<\/h2>\n\n<p>Za pomoc\u0105 funkcji map dziel\u0119 odwiedzaj\u0105cych na kategorie i kieruj\u0119 ich do osobnych <strong>Strefy<\/strong>. Znane roboty indeksuj\u0105ce otrzymuj\u0105 umiarkowane limity, a generyczne agenty \u2013 bardziej rygorystyczne. W przypadku \u015bcie\u017cek takich jak \/search czy \/report stosuj\u0119 surowsze ograniczenia, poniewa\u017c zajmuj\u0105 one du\u017co mocy obliczeniowej procesora. W przypadku powtarzaj\u0105cych si\u0119 narusze\u0144 nie zwi\u0119kszam limit\u00f3w, lecz blokuj\u0119 dost\u0119p na okre\u015blony czas lub przekazuj\u0119 sprawdzanie do modu\u0142u wykrywaj\u0105cego boty. W ten spos\u00f3b <strong>Wska\u017anik nadu\u017cy\u0107<\/strong> niski, bez zak\u0142\u00f3cania dzia\u0142ania wyszukiwarek.<\/p>\n\n<h2>Przyk\u0142ad: Dwie strefy i mapowanie agent\u00f3w u\u017cytkownika<\/h2>\n\n<p>Poni\u017cszy fragment przedstawia podzia\u0142 wed\u0142ug <strong>Agent u\u017cytkownika<\/strong> oraz przypisanie odpowiednich limit\u00f3w. \u0141\u0105cz\u0119 to ze zr\u00f3\u017cnicowanymi kodami statusu i polami logowania, aby dok\u0142adnie zmierzy\u0107 efekt. Boty z og\u00f3lnym agentem trafiaj\u0105 do strefy o surowych ograniczeniach. Ludzie lub zweryfikowane roboty indeksuj\u0105ce korzystaj\u0105 ze strefy o \u0142agodniejszych ograniczeniach. Takie podej\u015bcie zapewnia przewidywalne <strong>Przepustowo\u015b\u0107<\/strong> na klas\u0119:<\/p>\n\n<pre><code>map $http_user_agent $is_bot {\n  default 0;\n  \"~*googlebot\"     0;\n  \"~*bingbot\" 0;\n  \"~*crawler|scraper|bot\" 1;\n}\n\nlimit_req_zone $binary_remote_addr zone=human:10m rate=10r\/s;\nlimit_req_zone $binary_remote_addr zone=bot:10m   rate=1r\/s;\n\nserver {\n  location \/ {\n    if ($is_bot) {\n limit_req zone=bot burst=5;\n    }\n    if ($is_bot = 0) {\n limit_req zone=human burst=20 nodelay;\n    }\n    limit_req_status 429;\n  }\n}\n<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/nginx_rate_limiting_schutz_3947.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Obs\u0142uga b\u0142\u0119d\u00f3w: prawid\u0142owe zg\u0142aszanie b\u0142\u0119du 429<\/h2>\n\n<p>W przypadku limit\u00f3w podaj\u0119 jasn\u0105 <strong>Odpowied\u017a<\/strong> z informacj\u0105, kiedy warto podj\u0105\u0107 kolejn\u0105 pr\u00f3b\u0119. W przypadku interfejs\u00f3w API nale\u017cy poda\u0107 prawid\u0142owy nag\u0142\u00f3wek \u201eRetry-After\u201d, aby klienci stosowali algorytm \u201ebackoff\u201d. U\u017cytkownicy otrzymuj\u0105 kr\u00f3tkie wyja\u015bnienie bez szczeg\u00f3\u0142\u00f3w technicznych. Zmniejsza to liczb\u0119 zg\u0142osze\u0144 i zapewnia zrozumia\u0142e dzia\u0142anie systemu. Przejrzysta <strong>UX<\/strong> sprawia, \u017ce ograniczenia staj\u0105 si\u0119 akceptowalne i zapobiega frustracji.<\/p>\n\n<h2>Dostawca us\u0142ug hostingowych, sie\u0107 i j\u0105dro: wzmocnienie podstaw<\/h2>\n\n<p>Du\u017cy ruch legalny i \u015brodki ochronne wymagaj\u0105 niezawodnych <strong>Zasoby<\/strong> oraz sensowne ustawienia domy\u015blne na poziomie sieci. Zwracam uwag\u0119 na aktualne wersje NGINX, wystarczaj\u0105c\u0105 ilo\u015b\u0107 pami\u0119ci RAM dla stref oraz funkcje zabezpieczaj\u0105ce przed atakami transportowymi. W przypadku atak\u00f3w typu SYN-Flood pomocne jest w\u0142\u0105czenie <a href=\"https:\/\/webhosting.de\/pl\/ochrona-przed-atakami-syn-cookie-w-protokole-tcp-ataki-syn-flood-jadro-systemu\/\">Pliki cookie TCP SYN<\/a> w j\u0105drze systemu, aby po\u0142\u0105czenia nie utkn\u0119\u0142y. Podsumowuj\u0105c, odci\u0105\u017ca to NGINX od zb\u0119dnego obci\u0105\u017cenia. W ten spos\u00f3b skupiam ograniczenia na warstwach HTTP i utrzymuj\u0119 <strong>Przepustowo\u015b\u0107<\/strong> stabilny.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/09\/nginx-ratelimit-schutz-4829.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kr\u00f3tkie podsumowanie: oto jak skutecznie wykorzystuj\u0119 ograniczenie przepustowo\u015bci w NGINX<\/h2>\n\n<p>Ograniczam liczb\u0119 zapyta\u0144 na <strong>klucz<\/strong>, izoluj\u0119 \u015bcie\u017cki krytyczne i utrzymuj\u0119 boty na dystans dzi\u0119ki \u015bcis\u0142ym strefom. Funkcje Burst i nodelay pomagaj\u0105 dopuszcza\u0107 uzasadnione szczyty ruchu bez sprzyjania nadu\u017cyciom. Na podstawie 429 log\u00f3w na bie\u017c\u0105co kalibruj\u0119 warto\u015bci i zaostrzam limity tylko tam, gdzie jest to konieczne. W po\u0142\u0105czeniu z WAF, ochron\u0105 przed atakami DDoS, monitorowaniem i wzmocnieniem j\u0105dra powstaje solidna koncepcja ochrony. Kto konsekwentnie j\u0105 wdra\u017ca, znacznie ogranicza ruch bot\u00f3w i chroni <strong>Wydajno\u015b\u0107<\/strong> nawet pod obci\u0105\u017ceniem.<\/p>\n\n<h2>Elementy, kt\u00f3rych cz\u0119sto brakuje w praktyce<\/h2>\n\n<p>W wielu konfiguracjach brakuje kilku kluczowych element\u00f3w, kt\u00f3re znacznie zwi\u0119kszaj\u0105 skuteczno\u015b\u0107 ograniczania przepustowo\u015bci:<\/p>\n<ul>\n  <li><strong>Rzeczywisty adres IP klienta za serwerami proxy<\/strong>: Bez prawid\u0142owej obs\u0142ugi rzeczywistych adres\u00f3w IP serwer NGINX cz\u0119sto ogranicza adres IP urz\u0105dzenia r\u00f3wnowa\u017c\u0105cego obci\u0105\u017cenie \u2013 ograniczenia te dotycz\u0105 w\u00f3wczas wszystkich u\u017cytkownik\u00f3w zgrupowanych za tym urz\u0105dzeniem.<\/li>\n  <li><strong>Testy na sucho (Dry-Run)<\/strong>: Limity s\u0105 aktywowane \u201ena \u015blepo\u201c. Lepiej jest najpierw tylko zarejestrowa\u0107, ile razy limit ten zadzia\u0142a\u0142by.<\/li>\n  <li><strong>Klucze o drobnym ziarnie<\/strong>: Zamiast ogranicza\u0107 dost\u0119p wy\u0142\u0105cznie na podstawie adresu IP, warto wprowadzi\u0107 limity na token API, sesj\u0119 lub u\u017cytkownika, aby zapewni\u0107 wi\u0119ksz\u0105 sprawiedliwo\u015b\u0107.<\/li>\n  <li><strong>Wsp\u00f3\u0142dzia\u0142anie z limit_conn<\/strong>: R\u00f3wnoleg\u0142e po\u0142\u0105czenia i cz\u0119stotliwo\u015bci \u017c\u0105da\u0144 odzwierciedlaj\u0105 r\u00f3\u017cne wzorce nadu\u017cy\u0107.<\/li>\n  <li><strong>Szczeg\u00f3lne wyj\u0105tki<\/strong>: Kontrole stanu, webhooki lub us\u0142ugi wewn\u0119trzne cz\u0119sto wymagaj\u0105 mniej restrykcyjnych limit\u00f3w lub nie wymagaj\u0105 ich wcale.<\/li>\n<\/ul>\n\n<h2>Proxy odwrotne: bezpieczna analiza rzeczywistego adresu IP klienta<\/h2>\n\n<p>Je\u015bli NGINX znajduje si\u0119 za modu\u0142em r\u00f3wnowa\u017cenia obci\u0105\u017cenia, ustawiam dyrektywy Real-IP, aby $binary_remote_addr odzwierciedla\u0142 rzeczywistego klienta. Ufam wy\u0142\u0105cznie sieciom, kt\u00f3re nale\u017c\u0105 do mnie, i w\u0142\u0105czam rekurencyjn\u0105 interpretacj\u0119:<\/p>\n\n<pre><code>http {\n  # Zaufane zakresy adres\u00f3w IP serwer\u00f3w proxy (przyk\u0142ad)\n  set_real_ip_from 10.0.0.0\/8;\n  set_real_ip_from 192.168.0.0\/16;\n  # w razie potrzeby uzupe\u0142nij o publiczne zakresy LB\/CDN\n\n  real_ip_header X-Forwarded-For;\n  real_ip_recursive on;\n\n  limit_req_zone $binary_remote_addr zone=perip:20m rate=10r\/s;\n}\n<\/code><\/pre>\n\n<p>Bez tego ustawienia limit dotkn\u0105\u0142by w przeciwnym razie wielu niewinnych u\u017cytkownik\u00f3w jednocze\u015bnie. Po skonfigurowaniu sprawdzam w logach dost\u0119pu, czy pojawia si\u0119 oczekiwany adres IP klienta.<\/p>\n\n<h2>Strategia kluczowa: IP, u\u017cytkownik, token i \u015bcie\u017cka<\/h2>\n\n<p>Wybrany klucz decyduje o sprawiedliwo\u015bci i skuteczno\u015bci. Kilka sprawdzonych wzor\u00f3w:<\/p>\n<ul>\n  <li><strong>Pro IP<\/strong> ($binary_remote_addr): Szybkie wdro\u017cenie, dobrze sprawdza si\u0119 w przypadku \/login i anonimowych punkt\u00f3w ko\u0144cowych.<\/li>\n  <li><strong>Na token API<\/strong>: R\u00f3wno\u015b\u0107 mi\u0119dzy klientami; chroni przed wi\u0105zaniem NAT. Wyodr\u0119bniam tokeny za pomoc\u0105 map.<\/li>\n  <li><strong>Na ka\u017cd\u0105 klas\u0119 \u015bcie\u017cki<\/strong>: Nale\u017cy osobno ograniczy\u0107 kosztowne punkty ko\u0144cowe, np. \/search w wi\u0119kszym stopniu ni\u017c \/status.<\/li>\n<\/ul>\n\n<pre><code>map $http_authorization $api_token {\n  default \"\";\n  \"~*^Bearer\\s+(.+)$\" $1;\n}\n\nlimit_req_zone $api_token zone=per_token:30m rate=5r\/s;\n\nserver {\n  location \/api\/ {\n    # Ma znaczenie tylko wtedy, gdy token jest dost\u0119pny\n    limit_req zone=per_token burst=10;\n    limit_req_status 429;\n  }\n}\n<\/code><\/pre>\n\n<p>Wa\u017cne: Wysoka kardynalno\u015b\u0107 klucza zu\u017cywa pami\u0119\u0107 w strefie. Nale\u017cy przewidzie\u0107 bufory i monitorowa\u0107 zaj\u0119to\u015b\u0107 pami\u0119ci.<\/p>\n\n<h2>Pami\u0119\u0107 i wymiarowanie stref<\/h2>\n\n<p>Strefa przechowuje metadane dla ka\u017cdego aktywnego klucza. Zu\u017cycie na jeden wpis wynosi kilkadziesi\u0105t bajt\u00f3w plus nadmiar. Na tej podstawie wnioskuj\u0119, \u017ce:<\/p>\n<ul>\n  <li>W przypadku du\u017cej liczby jednoczesnych adres\u00f3w IP\/token\u00f3w wybieram wi\u0119ksze strefy, np. 50\u2013100 MB.<\/li>\n  <li>Zaczynam raczej ostro\u017cnie i przegl\u0105dam logi NGINX: komunikat \u201eshared memory zone is full\u201c oznacza konieczno\u015b\u0107 ponownego dostrojenia.<\/li>\n  <li>Niewykorzystane klucze trac\u0105 wa\u017cno\u015b\u0107 po kr\u00f3tkim okresie bezczynno\u015bci; warto\u015bci szczytowe s\u0105 wa\u017cniejsze ni\u017c \u015brednia dzienna.<\/li>\n<\/ul>\n\n<h2>Precyzyjne stosowanie trybu Burst i nodelay<\/h2>\n\n<p>Bez <strong>bez op\u00f3\u017anienia<\/strong> NGINX porz\u0105dkuje przekroczenia w ramach bufora impulsowego i <em>op\u00f3\u017aniony<\/em> \u017b\u0105dania. Z <strong>bez op\u00f3\u017anienia<\/strong> Dopuszczalne \u017c\u0105dania seryjne s\u0105 natychmiast przepuszczane, a nadwy\u017cki odrzucane. Moje post\u0119powanie:<\/p>\n<ul>\n  <li><strong>\u015acie\u017cki interaktywne<\/strong> (HTML): raczej bez atrybutu `nodelay`, aby generowa\u0107 kr\u00f3tkie czasy oczekiwania zamiast twardych b\u0142\u0119d\u00f3w 429.<\/li>\n  <li><strong>Interfejsy API<\/strong>: cz\u0119sto z opcj\u0105 \u201enodelay\u201d, aby klienci otrzymywali wyra\u017any kod stanu 429 i stosowali algorytm backoff.<\/li>\n  <li><strong>Drogie urz\u0105dzenia ko\u0144cowe<\/strong>: niewielka seria impuls\u00f3w w celu wyg\u0142adzenia skok\u00f3w obci\u0105\u017cenia po stronie serwera.<\/li>\n<\/ul>\n\n<h2>Pr\u00f3ba generalna, poziom logowania i analiza<\/h2>\n\n<p>Zanim w\u0142\u0105cz\u0119 limity, uruchamiam tryb Dry-Run i dostosowuj\u0119 poziom logowania. W ten spos\u00f3b mog\u0119 sprawdzi\u0107 efekt bez ryzyka:<\/p>\n\n<pre><code>server {\n  location \/api\/ {\n    limit_req zone=perip burst=20;\n    limit_req_dry_run on; # tylko rejestrowa\u0107, nie blokowa\u0107\n    limit_req_log_level notice;  # mniej powa\u017cny ni\u017c 'error'\n  }\n}\n<\/code><\/pre>\n\n<p>Nast\u0119pnie analizuj\u0119 dane o dost\u0119pie z ostatnich 3\u20137 dni, identyfikuj\u0119 punkty o najwi\u0119kszym nat\u0119\u017ceniu ruchu, dostosowuj\u0119 parametry rate\/burst i dopiero wtedy wy\u0142\u0105czam tryb Dry-Run.<\/p>\n\n<h2>429 \u2013 prawid\u0142owy transport: HTML, JSON i Retry-After<\/h2>\n\n<p>Aby zapewni\u0107 dobry UX, rozr\u00f3\u017cniam przegl\u0105darki i klienty API oraz stosuj\u0119 <strong>Retry\u2011After<\/strong>. Oto jak jasno komunikuj\u0119 granice:<\/p>\n\n<pre><code>map $http_accept $wants_json {\n  default 0;\n  \"~*application\/json|\/json\"    1;\n}\n\nserver {\n  error_page 429 = @rate_limited;\n\n  location @rate_limited {\n    add_header Retry-After 2 always;\n    if ($wants_json) {\n add_header Content-Type application\/json;\n      return 429 '{\"error\":\"too_many_requests\",\"retry_after\":2}';\n    }\n    return 429 \"Prosz\u0119 spr\u00f3bowa\u0107 ponownie p\u00f3\u017aniej.\";\n  }\n}\n<\/code><\/pre>\n\n<p>Interfejsy API mog\u0105 w ten spos\u00f3b reagowa\u0107 programowo, a u\u017cytkownicy otrzymuj\u0105 zrozumia\u0142y komunikat.<\/p>\n\n<h2>Po\u0142\u0105czenie limit_req i limit_conn<\/h2>\n\n<p><strong>limit_req<\/strong> prze\u0142adunek w danym przedziale czasowym, <strong>limit_conn<\/strong> ogranicza liczb\u0119 jednoczesnych po\u0142\u0105cze\u0144. Aby zapobiega\u0107 pobieraniu plik\u00f3w, aktywno\u015bci klientom typu \u201echatty\u201d lub zalewom HTTP\/2, stosuj\u0119 po\u0142\u0105czenie obu rozwi\u0105za\u0144:<\/p>\n\n<pre><code>limit_conn_zone $binary_remote_addr zone=perip_conn:10m;\n\nserver {\n  location \/api\/ {\n    limit_req  zone=perip burst=20 nodelay;\n    limit_conn zone=perip_conn 20;  # maks. 20 jednoczesnych po\u0142\u0105cze\u0144 na adres IP\n  }\n}\n<\/code><\/pre>\n\n<p>W ten spos\u00f3b zapobiegam sytuacji, w kt\u00f3rej niewielka liczba klient\u00f3w wprawdzie przestrzega limitu, ale zajmuje zasoby zbyt du\u017c\u0105 liczb\u0105 r\u00f3wnoleg\u0142ych po\u0142\u0105cze\u0144.<\/p>\n\n<h2>Wyj\u0105tki, kontrole stanu i trasy wewn\u0119trzne<\/h2>\n\n<p>Nie ka\u017cda \u015bcie\u017cka wymaga ogranicze\u0144. Kontrole stanu (\/healthz), wewn\u0119trzne webhooki lub wywo\u0142ania zwrotne p\u0142atno\u015bci otrzymuj\u0105 w\u0142asne lokalizacje bez parametru `limit_req` \u2013 lub z mniej restrykcyjnymi warto\u015bciami:<\/p>\n\n<pre><code>server {\n  # brak limit\u00f3w dla test\u00f3w sprawno\u015bci\n  location = \/healthz { return 200 \"ok\"; }\n\n  # \u0142agodne limity dla wywo\u0142a\u0144 zwrotnych zwi\u0105zanych z p\u0142atno\u015bciami\n  location \/webhooks\/pay\/ {\n    limit_req zone=perip burst=5;\n  }\n\n  # \u015bcis\u0142a ochrona logowania\n  location = \/login {\n    limit_req zone=perip rate=1r\/s burst=3;\n  }\n}\n<\/code><\/pre>\n\n<p>Wyj\u0105tki na poziomie szczeg\u00f3\u0142owym ograniczaj\u0105 liczb\u0119 fa\u0142szywych alarm\u00f3w i zapewniaj\u0105 stabilno\u015b\u0107 integracji.<\/p>\n\n<h2>Bardziej niezawodne routingowanie strefowe bez \u201emagii\u201d instrukcji IF<\/h2>\n\n<p>Je\u015bli chodzi o rozr\u00f3\u017cnienie \u201ebot a cz\u0142owiek\u201c, preferuj\u0119 wewn\u0119trzne przekierowania za pomoc\u0105 nazwanych lokalizacji. Dzi\u0119ki temu konfiguracja jest przejrzysta i przewidywalna:<\/p>\n\n<pre><code>map $http_user_agent $is_bot {\n  default 0;\n  \"~*googlebot|bingbot\" 0;\n  \"~*crawler|scraper|bot\" 1;\n}\n\nlimit_req_zone $binary_remote_addr zone=human:20m rate=10r\/s;\nlimit_req_zone $binary_remote_addr zone=bot:10m   rate=1r\/s;\n\nserver {\n  error_page 418 = @bot;\n\n  location \/ {\n    if ($is_bot) { return 418; }   # wewn\u0119trzne przekierowanie\n    limit_req zone=human burst=20 nodelay;\n    limit_req_status 429;\n    try_files $uri $uri\/ \/index.html;\n  }\n\n  location @bot {\n    limit_req zone=bot burst=5;\n    limit_req_status 429;\n  }\n}\n<\/code><\/pre>\n\n<p>W ten spos\u00f3b boty trafiaj\u0105 w spos\u00f3b deterministyczny do strefy surowej, a ludzie do strefy swobodnej \u2013 przy czym oba ograniczenia nie dzia\u0142aj\u0105 jednocze\u015bnie.<\/p>\n\n<h2>Testowanie, mierzenie, przymierzanie: praktyczny przebieg czynno\u015bci<\/h2>\n\n<ul>\n  <li><strong>Inscenizacja<\/strong>: Wybierz konserwatywne ustawienia cz\u0119stotliwo\u015bci\/serii, w\u0142\u0105cz tryb Dry-Run, przeprowad\u017a test obci\u0105\u017cenia syntetycznego na \u015bcie\u017cce krytycznej.<\/li>\n  <li><strong>Testy dymu<\/strong>: Generowanie kr\u00f3tkich serii za pomoc\u0105 curl lub Lasttools i sprawdzanie zachowania kodu 429\/op\u00f3\u017anienia.<\/li>\n  <li><strong>Program pilota\u017cowy dotycz\u0105cy wydajno\u015bci<\/strong>: Najpierw zastosowa\u0107 w poszczeg\u00f3lnych lokalizacjach, uwa\u017cnie monitorowa\u0107 logi.<\/li>\n  <li><strong>Ostrzenie iteracyjne<\/strong>: Nale\u017cy ustala\u0107 limity tylko tam, gdzie pojawiaj\u0105 si\u0119 wzorce; nale\u017cy zminimalizowa\u0107 liczb\u0119 fa\u0142szywych alarm\u00f3w.<\/li>\n<\/ul>\n\n<pre><code>Przyk\u0142ad #: szybki test seryjny za pomoc\u0105 curl\nfor i in {1..50}; do curl -s -o \/dev\/null -w \"%{http_code}\\n\" https:\/\/example.com\/login &amp; done; wait\n<\/code><\/pre>\n\n<h2>Cz\u0119stotliwo\u015b\u0107 w minutach zamiast w sekundach i szczeg\u00f3\u0142owe \u015bcie\u017cki<\/h2>\n\n<p>NGINX pozwala na ustawianie cz\u0119stotliwo\u015bci w sekundach lub minutach (<strong>r\/s<\/strong>, <strong>r\/m<\/strong>). W przypadku nadu\u017cy\u0107 zwi\u0105zanych z logowaniem cz\u0119sto ustawiam limit 60r\/m zamiast 1r\/s, aby zezwoli\u0107 na kr\u00f3tkie, uzasadnione podw\u00f3jne klikni\u0119cia, ale ograniczy\u0107 ci\u0105g\u0142e klikni\u0119cia. Drogie \u015bcie\u017cki maj\u0105 w\u0119\u017csze limity ni\u017c tanie. Przyk\u0142ad:<\/p>\n\n<pre><code>limit_req_zone $binary_remote_addr zone=perip_min:20m rate=60r\/m;\n\nserver {\n  location \/search\/ {\n    limit_req zone=perip_min burst=10;   # bardziej rygorystyczne\n  }\n  location \/status {\n    # brak limitu \u2013 tania opcja, wykorzystywana wewn\u0119trznie\n    return 200;\n  }\n}\n<\/code><\/pre>\n\n<h2>Pu\u0142apki i jak ich unika\u0107<\/h2>\n\n<ul>\n  <li><strong>Niew\u0142a\u015bciwy klucz<\/strong>: W przypadku serwer\u00f3w proxy bez prawdziwego adresu IP nieumy\u015blnie ograniczam dost\u0119p wszystkim u\u017cytkownikom jednocze\u015bnie.<\/li>\n  <li><strong>Zbyt ma\u0142e strefy<\/strong>: Komunikat \u201ezone is full\u201c powoduje nieprzewidywalne zachowanie \u2013 nale\u017cy zapewni\u0107 odpowiedni\u0105 rezerw\u0119.<\/li>\n  <li><strong>Limit na wszystko<\/strong>: R\u00f3\u017cne \u015bcie\u017cki wymagaj\u0105 r\u00f3\u017cnych warto\u015bci; uniwersalne podej\u015bcie powoduje frustracj\u0119.<\/li>\n  <li><strong>Brak monitorowania<\/strong>: Bez analizy 429 nieprawid\u0142owe konfiguracje pozostaj\u0105 niezauwa\u017cone.<\/li>\n  <li><strong>Lista ponad-bia\u0142a<\/strong>: Zbyt szerokie wyj\u0105tki otwieraj\u0105 furtk\u0119 \u2013 nale\u017cy tworzy\u0107 bia\u0142e listy w spos\u00f3b ukierunkowany, tymczasowy i przejrzysty.<\/li>\n<\/ul>\n\n<h2>Szczeg\u00f3lne cechy protoko\u0142u HTTP\/2, SSE i buforowania<\/h2>\n\n<p>HTTP\/2 \u0142\u0105czy \u017c\u0105dania w kilka po\u0142\u0105cze\u0144; <strong>limit_conn<\/strong> nadal ma to znaczenie, poniewa\u017c strumienie zu\u017cywaj\u0105 zasoby. Zdarzenia wysy\u0142ane przez serwer (Server-Sent Events) lub d\u0142ugie pobieranie rzadko powoduj\u0105 przekroczenie limit\u00f3w przepustowo\u015bci (niewiele \u017c\u0105da\u0144), ale poch\u0142aniaj\u0105 czas \u2013 w takich przypadkach ograniczam liczb\u0119 r\u00f3wnoleg\u0142ych po\u0142\u0105cze\u0144 za pomoc\u0105 `limit_conn` lub stosuj\u0119 strategie zarz\u0105dzania przepustowo\u015bci\u0105. Tam, gdzie to mo\u017cliwe, odci\u0105\u017cam system za pomoc\u0105 <strong>Buforowanie<\/strong> (np. zasoby statyczne, cz\u0119ste \u017c\u0105dania GET), dzi\u0119ki czemu limity b\u0119d\u0105 rzadziej si\u0119 uruchamia\u0107, a u\u017cytkownicy b\u0119d\u0105 otrzymywa\u0107 szybsze odpowiedzi.<\/p>\n\n<h2>Lista kontrolna operacyjna<\/h2>\n\n<ul>\n  <li>Prawid\u0142owy adres Real-IP, zdefiniowane klucze (IP\/token\/u\u017cytkownik)<\/li>\n  <li>Strefy o du\u017cych rozmiarach, dost\u0119pne wska\u017aniki i logi<\/li>\n  <li>szybko\u015b\u0107\/seria dostosowana do klasy \u015bcie\u017cki, celowo ustawiono opcj\u0119 \u201enodelay\u201d<\/li>\n  <li>Przeprowadzono test na sucho, zaimplementowano komunikacj\u0119 429 (Retry-After)<\/li>\n  <li>Wyj\u0105tki dotycz\u0105ce Health\/Webhooks, po\u0142\u0105czenie z limit_conn<\/li>\n  <li>Iteracyjne dostrajanie i powiadamianie o anomaliach<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak dzi\u0119ki funkcji ograniczania przepustowo\u015bci w NGINX chroni\u0107 swoj\u0105 stron\u0119 internetow\u0105 przed ruchem bot\u00f3w i atakami, zwi\u0119kszaj\u0105c w ten spos\u00f3b bezpiecze\u0144stwo serwera WWW. W zestawie praktyczne przyk\u0142ady i sprawdzone rozwi\u0105zania.<\/p>","protected":false},"author":1,"featured_media":21248,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-21255","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plesk-webserver-plesk-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"68","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"NGINX Rate","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21248","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=21255"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21255\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/21248"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=21255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=21255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=21255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}