{"id":20722,"date":"2026-08-17T08:35:37","date_gmt":"2026-08-17T06:35:37","guid":{"rendered":"https:\/\/webhosting.de\/nginx-worker-connections-skalierung-tausender-requests-trafficboost\/"},"modified":"2026-08-17T08:35:37","modified_gmt":"2026-08-17T06:35:37","slug":"nginx-skalowanie-polaczen-workerow-obsluga-tysiecy-zadan-zwiekszenie-przepustowosci-ruchu","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/nginx-worker-connections-skalierung-tausender-requests-trafficboost\/","title":{"rendered":"Po\u0142\u0105czenia pracownik\u00f3w NGINX \u2013 skalowanie tysi\u0119cy \u017c\u0105da\u0144 w celu uzyskania maksymalnej wydajno\u015bci hostingu"},"content":{"rendered":"<p>Celowo skaluj\u0119 liczb\u0119 proces\u00f3w roboczych serwera nginx, aby obs\u0142u\u017cy\u0107 tysi\u0105ce jednoczesnych \u017c\u0105da\u0144 przy niewielkim <strong>Op\u00f3\u017anienie<\/strong> obs\u0142ugiwa\u0107. Kluczem jest odpowiednio dobrana kombinacja parametr\u00f3w worker_processes, worker_connections, deskryptor\u00f3w plik\u00f3w oraz <strong>Wydarzenia<\/strong>.<\/p>\n\n<h2>Punkty centralne<\/h2>\n<ul>\n  <li><strong>Pojemno\u015b\u0107<\/strong> = worker_processes \u00d7 worker_connections; w przypadku odwrotnego proxy cz\u0119sto wynika to z po\u0142\u0105cze\u0144 klienckich i upstreamowych <strong>podwojono<\/strong>.<\/li>\n  <li><strong>Deskryptory plik\u00f3w<\/strong> (worker_rlimit_nofile, ulimit) dostosowane do przewidywanego obci\u0105\u017cenia po\u0142\u0105czeniami <strong>winda<\/strong>.<\/li>\n  <li><strong>Wydarzenia<\/strong>-Blok z epoll, multi_accept i zaleg\u0142o\u015bciami j\u0105dra przy du\u017cym obci\u0105\u017ceniu <strong>przycina\u0107<\/strong>.<\/li>\n  <li><strong>Monitoring<\/strong> za pomoc\u0105 funkcji `stub_status` i test\u00f3w obci\u0105\u017ceniowych dla iteracyjnych <strong>Personalizacja<\/strong>.<\/li>\n  <li><strong>Skalowanie<\/strong> \u0142\u0105czenie w pionie i w poziomie, konfiguracja <strong>od\u0142\u0105czenie<\/strong>.<\/li>\n<\/ul>\n\n<h2>Architektura NGINX: serwer g\u0142\u00f3wny, serwery robocze i zdarzenia<\/h2>\n<p>NGINX opiera si\u0119 na procesie g\u0142\u00f3wnym, kt\u00f3ry uruchamia kilka proces\u00f3w roboczych i efektywnie zarz\u0105dza nimi za pomoc\u0105 <strong>Wydarzenia<\/strong> obs\u0142uguje. Zamiast przetwarza\u0107 w\u0105tki na \u017c\u0105danie, ka\u017cdy proces roboczy obs\u0142uguje wiele po\u0142\u0105cze\u0144 w trybie nieblokuj\u0105cym, wykorzystuj\u0105c model oparty na zdarzeniach o niskim <strong>Nad g\u0142ow\u0105<\/strong>. Ustawiam opcj\u0119 worker_processes na \u201eauto\u201d, aby NGINX wykorzystywa\u0142 rdzenie procesora i przydziela\u0142 ka\u017cdemu procesowi w\u0142asnego pracownika. W ten spos\u00f3b lepiej rozdzielam przychodz\u0105ce po\u0142\u0105czenia i utrzymuj\u0119 op\u00f3\u017anienie na niskim poziomie nawet przy szczytowym obci\u0105\u017ceniu <strong>niski<\/strong>. Aby uzyska\u0107 bardziej szczeg\u00f3\u0142owe informacje na temat planowania proces\u00f3w, odsy\u0142am do <a href=\"https:\/\/webhosting.de\/pl\/optymalna-konfiguracja-procesow-roboczych-nginx-zwiekszenie-wydajnosci\/\">Optymalizacja proces\u00f3w typu \u201eworker\u201d<\/a>, poniewa\u017c prawid\u0142owe roz\u0142o\u017cenie zada\u0144 na wiele proces\u00f3w decyduje o realnej przepustowo\u015bci po\u0142\u0105cze\u0144. Kluczowe znaczenie ma to, aby liczba po\u0142\u0105cze\u0144 worker_connections na ka\u017cdy procesor roboczy by\u0142a odpowiednio dobrana, tak aby ich pomno\u017cenie przez liczb\u0119 proces\u00f3w da\u0142o oczekiwan\u0105 <strong>Obci\u0105\u017cenie szczytowe<\/strong> obejmuje.<\/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\/08\/nginx-worker-rechenzentrum-7421.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wz\u00f3r na przepustowo\u015b\u0107: worker_processes \u00d7 worker_connections<\/h2>\n<p>Przybli\u017con\u0105 przepustowo\u015b\u0107 obliczam jako iloczyn worker_processes i worker_connections, przy czym \u017c\u0105dania obs\u0142ugiwane przez serwer proxy cz\u0119sto zajmuj\u0105 dwa po\u0142\u0105czenia na jedno wej\u015bcie u\u017cytkownika, co w efekcie zmniejsza t\u0119 liczb\u0119 o po\u0142ow\u0119 <strong>Puszka<\/strong>. Wiele standardowych instalacji rozpoczyna prac\u0119 z 512 po\u0142\u0105czeniami na ka\u017cdy proces roboczy, co w przypadku obci\u0105\u017ce\u0144 produkcyjnych cz\u0119sto okazuje si\u0119 niewystarczaj\u0105ce <strong>jest<\/strong>. Praktyczne warto\u015bci pocz\u0105tkowe wynosz\u0105 zazwyczaj od 1024 do 4096 i zale\u017c\u0105 od profilu ruchu oraz sprz\u0119tu. Planuj\u0119 z uwzgl\u0119dnieniem rezerwy, czyli co najmniej dwukrotno\u015bci zmierzonego obci\u0105\u017cenia szczytowego, aby bezpiecznie obs\u0142u\u017cy\u0107 skoki obci\u0105\u017cenia <strong>z\u0142agodzi\u0107<\/strong>. Wa\u017cna pozostaje weryfikacja za pomoc\u0105 test\u00f3w i wska\u017anik\u00f3w z rzeczywistego \u015brodowiska, aby liczby nie sta\u0142y si\u0119 jedynie teoretyczn\u0105 zabaw\u0105 <strong>sta\u0107 si\u0119<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>Scenariusz<\/strong><\/th>\n      <th><strong>worker_processes<\/strong><\/th>\n      <th><strong>worker_connections<\/strong><\/th>\n      <th><strong>Teoretycznie maks.<\/strong><\/th>\n      <th><strong>Efektywne (proxy)<\/strong><\/th>\n      <th><strong>FD na pracownika<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Ma\u0142a strona<\/td>\n      <td>2<\/td>\n      <td>1024<\/td>\n      <td>2048<\/td>\n      <td>~1024<\/td>\n      <td>\u22651024<\/td>\n    <\/tr>\n    <tr>\n      <td>API \u2013 \u015brednie obci\u0105\u017cenie<\/td>\n      <td>4<\/td>\n      <td>2048<\/td>\n      <td>8192<\/td>\n      <td>~4096<\/td>\n      <td>\u22652048<\/td>\n    <\/tr>\n    <tr>\n      <td>Godziny szczytu w sklepie<\/td>\n      <td>8<\/td>\n      <td>4096<\/td>\n      <td>32768<\/td>\n      <td>~16384<\/td>\n      <td>\u22654096<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>HTTP\/1.1, HTTP\/2 i TLS: wp\u0142yw na procesy robocze i op\u00f3\u017anienia<\/h2>\n<p>Protoko\u0142y okre\u015blaj\u0105 profil po\u0142\u0105czenia. W przypadku HTTP\/1.1 cz\u0119sto obserwuj\u0119 wiele r\u00f3wnoczesnych po\u0142\u0105cze\u0144 TCP na jednego klienta, podczas gdy HTTP\/2 ogranicza ich liczb\u0119 do kilku, za to bardziej obci\u0105\u017conych strumieni <strong>pakiety<\/strong>. Pozwala to zaoszcz\u0119dzi\u0107 deskryptory plik\u00f3w, ale przenosi obci\u0105\u017cenie na bufory i mechanizmy ustalania priorytet\u00f3w. W przypadku TLS zwracam uwag\u0119 na ponowne wykorzystanie sesji, aby unikn\u0105\u0107 kosztownych procedur uzgadniania przy ka\u017cdym \u017c\u0105daniu <strong>zwolni\u0107<\/strong>. Wsp\u00f3lna pami\u0119\u0107 podr\u0119czna sesji oraz odpowiednie limity czasu zmniejszaj\u0105 skoki obci\u0105\u017cenia procesora. Ponadto nie ustawiam warto\u015bci keepalive_requests zbyt nisko, aby po\u0142\u0105czenia d\u0142ugotrwa\u0142e mog\u0142y w pe\u0142ni wykorzysta\u0107 swoje zalety <strong>play out<\/strong>. W przypadku protoko\u0142u HTTP\/2 zak\u0142adam wy\u017csz\u0105 wsp\u00f3\u0142bie\u017cno\u015b\u0107 na ka\u017cde po\u0142\u0105czenie i dbam o to, by bufory wysy\u0142ania i odbierania by\u0142y wystarczaj\u0105co du\u017ce, bez zajmowania pami\u0119ci <strong>marnowa\u0107<\/strong>. W przypadku ruchu mieszanego planuj\u0119 ostro\u017cnie i weryfikuj\u0119 skutki dla poszczeg\u00f3lnych wariant\u00f3w protoko\u0142u w <strong>Test<\/strong>.<\/p>\n\n<h2>Prawid\u0142owe ustawienie deskryptor\u00f3w plik\u00f3w i ulimit<\/h2>\n<p>Ka\u017cde po\u0142\u0105czenie wymaga co najmniej jednego deskryptora pliku, a w przypadku odwrotnego proxy cz\u0119sto dw\u00f3ch, dlatego niskie warto\u015bci ulimit mog\u0105 stanowi\u0107 powa\u017cny problem <strong>Granice<\/strong> ustawi\u0107. Zwi\u0119kszam warto\u015b\u0107 worker_rlimit_nofile tak, aby mo\u017cna by\u0142o zrealizowa\u0107 ustawienie worker_processes \u00d7 worker_connections oraz zapewni\u0107 rezerwy na logi, gniazda i pami\u0119ci podr\u0119czne. W skali ca\u0142ego systemu dostosowuj\u0119 pliki limits.conf i fs.file-max, aby system operacyjny zezwoli\u0142 na planowan\u0105 liczb\u0119 otwartych plik\u00f3w i nie zako\u0144czy\u0142 dzia\u0142ania przedwcze\u015bnie <strong>hamulce<\/strong>. Za pomoc\u0105 polecenia `ulimit -n` oraz parametr\u00f3w Systemd (LimitNOFILE) sprawdzam, czy konfiguracja jest trwa\u0142a i zgodna z NGINX. Kto zignoruje t\u0119 opcj\u0119, ten mimo wysokiej warto\u015bci `worker_connections` nagle do\u015bwiadczy odrzucanych po\u0142\u0105cze\u0144 i rosn\u0105cego <strong>Op\u00f3\u017anienia<\/strong>.<\/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\/08\/nginx_worker_connections_3894.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Precyzyjne dostosowanie bloku zdarze\u0144: epoll, multi_accept, backlogi<\/h2>\n<p>W systemie Linux korzystam z epoll, poniewa\u017c mechanizm ten pozwala efektywnie obs\u0142ugiwa\u0107 du\u017c\u0105 liczb\u0119 po\u0142\u0105cze\u0144 za pomoc\u0105 komunikacji asynchronicznej <strong>Wydarzenia<\/strong> obs\u0142uguje. Przy ustawieniu multi_accept na \u201eon\u201d pracownik akceptuje kilka nowych po\u0142\u0105cze\u0144 na jedno zdarzenie, co pozwala wyr\u00f3wna\u0107 szczyty obci\u0105\u017cenia i op\u00f3\u017anienia w przyjmowaniu po\u0142\u0105cze\u0144 <strong>obni\u017cki<\/strong>. Odpowiednio zwi\u0119kszam parametry j\u0105dra, takie jak net.core.somaxconn i net.ipv4.tcp_max_syn_backlog, aby kolejki Accept nie uleg\u0142y przepe\u0142nieniu podczas nat\u0142oku po\u0142\u0105cze\u0144. Optymalizacje stanu TIME_WAIT, takie jak tcp_tw_reuse, zmniejszaj\u0105 w\u0105skie gard\u0142a port\u00f3w i utrzymuj\u0105 krzyw\u0105 przepustowo\u015bci <strong>wysoki<\/strong>. Aby uzyska\u0107 bardziej szczeg\u00f3\u0142owe informacje na temat wielow\u0105tkowo\u015bci i kolejek, warto zajrze\u0107 do <a href=\"https:\/\/webhosting.de\/pl\/threadpool-serwer-www-apache-nginx-litespeed-optymalizacja-konfiguracja\/\">Optymalizacja puli w\u0105tk\u00f3w<\/a>, nawet je\u015bli NGINX dzia\u0142a przede wszystkim w oparciu o zdarzenia, dzi\u0119ki czemu jest bardzo oszcz\u0119dny <strong>skalowany<\/strong>.<\/p>\n\n<h2>Prawid\u0142owe przydzielanie gniazd listowych: reuseport, backlog i accept_mutex<\/h2>\n<p>W przypadku bardzo du\u017cej liczby jednoczesnych po\u0142\u0105cze\u0144 aktywnie skaluj\u0119 \u015bcie\u017ck\u0119 obs\u0142ugi. Za pomoc\u0105 <strong>reuseport<\/strong> Ka\u017cdy proces roboczy otrzymuje w\u0142asny gniazdo nas\u0142uchuj\u0105ce; dzi\u0119ki temu eliminuje si\u0119 konkurencja przy operacji `accept`, a obci\u0105\u017cenie jest r\u00f3wnomiernie rozk\u0142adane na wszystkie rdzenie. Wyra\u017anie ustawiam wielko\u015b\u0107 kolejki nas\u0142uchuj\u0105cej, aby z\u0142agodzi\u0107 skutki kr\u00f3tkotrwa\u0142ych szczyt\u00f3w obci\u0105\u017cenia. W tej konfiguracji accept_mutex nie jest ju\u017c potrzebny. Natomiast bez opcji reuseport accept_mutex mo\u017ce <strong>pom\u00f3c<\/strong>, aby ograniczy\u0107 efekt stada w module Accept. Wa\u017cne: wielko\u015bci backlogu w NGINX i j\u0105drze (somaxconn) powinny <strong>pasuj\u0105 do siebie<\/strong>, w przeciwnym razie efekt zostanie zniweczony.<\/p>\n<pre><code>events {\n    use epoll;\n    worker_connections 4096;\n    # accept_mutex on;   # z opcj\u0105 reuseport zazwyczaj nie jest to konieczne\n}\n\nserver {\n    listen 443 ssl http2 reuseport backlog=65535;\n    # ...\n}\n<\/code><\/pre>\n<p>Dodatkowo, w razie potrzeby przypisuj\u0119 procesy robocze do rdzeni procesora (worker_cpu_affinity), aby zapewni\u0107 stabilno\u015b\u0107 linii pami\u0119ci podr\u0119cznej i obci\u0105\u017cenia IRQ. W \u015brodowiskach o silnej architekturze NUMA zmniejsza to niepotrzebne <strong>Ruch poprzeczny<\/strong> w pami\u0119ci.<\/p>\n\n<h2>Proxy odwrotne, serwery \u017ar\u00f3d\u0142owe i Keep-Alive<\/h2>\n<p>Jako serwer proxy odwrotny NGINX cz\u0119sto utrzymuje dwa po\u0142\u0105czenia na ka\u017cde \u017c\u0105danie: jedno z klientem i jedno z serwerem zaplecza, co pozwala na realistyczne planowanie wydajno\u015bci <strong>podw\u00f3jny<\/strong> liczy si\u0119. W\u0142\u0105czam funkcj\u0119 Keep-Alive w rozs\u0105dny spos\u00f3b, aby po\u0142\u0105czenia upstreamowe mog\u0142y by\u0107 ponownie wykorzystywane, a obci\u0105\u017cenie na \u017c\u0105danie <strong>spadki<\/strong>. W ten spos\u00f3b zmniejszam obci\u0105\u017cenie serwera PHP-FPM, serwera aplikacji lub mikrous\u0142ug i zyskuj\u0119 wolne sloty dla nowych sesji u\u017cytkownik\u00f3w. R\u00f3wnowaga mi\u0119dzy limitami czasu, czasem bezczynno\u015bci i ponownym wykorzystaniem decyduje o tym, jak sprawnie odbywa si\u0119 recykling po\u0142\u0105cze\u0144 <strong>sta\u0107 si\u0119<\/strong>. Je\u015bli kto\u015b chcia\u0142by zapozna\u0107 si\u0119 z podstawowymi informacjami na ten temat, znajdzie je w <a href=\"https:\/\/webhosting.de\/pl\/http-trwale-polaczenia-wykorzystanie-serwera-www-wydajnosc-sieci\/\">Trwa\u0142e po\u0142\u0105czenia<\/a> praktyczne wskaz\u00f3wki dotycz\u0105ce wykorzystania przepustowo\u015bci i poprawy wydajno\u015bci sieci<strong>U\u017cyj<\/strong>.<\/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\/08\/nginx-worker-connections-scalability-2941.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Pule upstream, limity czasu i ponowne pr\u00f3by<\/h2>\n<p>Aby procesy Worker nie musia\u0142y czeka\u0107 na powolne serwery zaplecza, stosuj\u0119 kr\u00f3tkie limity czasu i odpowiednio dobrane ponowne pr\u00f3by. Pule keepalive upstream utrzymuj\u0119 na wystarczaj\u0105co du\u017cym poziomie, aby po\u0142\u0105czenia pozostawa\u0142y aktywne, ale nie na tyle du\u017cym, by nieaktywne deskriptory plik\u00f3w zajmowa\u0142y pami\u0119\u0107 i sloty <strong>wi\u0105zanie<\/strong>. Ograniczam liczb\u0119 ponownych pr\u00f3b do kilku i prze\u0142\u0105czam si\u0119 tylko w przypadku wyra\u017anych b\u0142\u0119d\u00f3w transmisji \u2013 w ten spos\u00f3b zapobiegam efektowi \u201ethundering herd\u201d w przypadku kr\u00f3tkotrwa\u0142ych awarii backendu.<\/p>\n<pre><code>upstream app_backend {\n    server 10.0.0.11:8080 max_fails=3 fail_timeout=10s;\n    server 10.0.0.12:8080 max_fails=3 fail_timeout=10s;\n    keepalive 64;  Po\u0142\u0105czenia upstream typu # z mo\u017cliwo\u015bci\u0105 ponownego wykorzystania\n}\n\nserver {\n    location \/ {\n proxy_pass http:\/\/app_backend;\n proxy_connect_timeout   2s;\n        proxy_read_timeout 15s;\n proxy_send_timeout 15s;\n proxy_next_upstream     error timeout http_502 http_503;\n proxy_next_upstream_tries 2;\n    }\n}\n<\/code><\/pre>\n<p>Jednocze\u015bnie dostosowuj\u0119 parametry Keep-Alive (limity czasu, liczba \u017c\u0105da\u0144 na po\u0142\u0105czenie), aby szybko zwolni\u0107 zasoby zajmowane przez rzadko aktywnych klient\u00f3w <strong>udost\u0119pni\u0107<\/strong>.<\/p>\n\n<h2>Rozs\u0105dne planowanie skalowania: \u0142\u0105czenie skalowania pionowego i poziomego<\/h2>\n<p>W przypadku du\u017cego nat\u0119\u017cenia ruchu stosuj\u0119 jednocze\u015bnie skalowanie pionowe i poziome w <strong>Rozwa\u017c<\/strong>. Skaluj\u0119 w pionie poprzez zwi\u0119kszenie liczby rdzeni procesora, pami\u0119ci RAM, szybkich dysk\u00f3w SSD oraz zoptymalizowan\u0105 konfiguracj\u0119 sieciow\u0105, aby ka\u017cdy procesor pracowa\u0142 p\u0142ynnie <strong>prace<\/strong>. Rozbudow\u0119 horyzontaln\u0105 realizuj\u0119 za pomoc\u0105 bezstanowych w\u0119z\u0142\u00f3w NGINX, centralnie zarz\u0105dzanej konfiguracji i rozproszonego rejestrowania, dzi\u0119ki czemu ca\u0142kowita pojemno\u015b\u0107 ro\u015bnie liniowo <strong>ro\u015bnie<\/strong>. Lokalne pami\u0119ci podr\u0119czne i jasno okre\u015blone zasady za po\u015brednictwem Maps lub API umo\u017cliwiaj\u0105 szybkie wdra\u017canie zmian. Takie rozdzielenie ogranicza skutki uboczne i pomaga dostosowywa\u0107 si\u0119 do nowych wzorc\u00f3w ruchu bez konieczno\u015bci wprowadzania zmian w ka\u017cdym w\u0119\u017ale <strong>obs\u0142ugiwa\u0107<\/strong>.<\/p>\n\n<h2>Perspektywa hostingu: op\u00f3\u017anienia, wska\u017aniki b\u0142\u0119d\u00f3w i wra\u017cenia u\u017cytkownika<\/h2>\n<p>Zbyt ma\u0142a liczba po\u0142\u0105cze\u0144 typu `worker_connections` powoduje odrzucanie po\u0142\u0105cze\u0144, przekroczenia limit\u00f3w czasu i pogorszenie <strong>Do\u015bwiadczenie u\u017cytkownika<\/strong>. Aplikacje dynamiczne, takie jak systemy CMS czy sklepy internetowe, od razu to odczuwaj\u0105, poniewa\u017c wywo\u0142anie strony generuje wiele zapyta\u0144 do zaplecza, a sloty s\u0105 wykorzystywane szybciej <strong>kr\u00f3tki<\/strong> . Dlatego zaczynam od umiarkowanych warto\u015bci, takich jak 1024 lub 2048 na ka\u017cdy proces roboczy, i stopniowo je zwi\u0119kszam na podstawie rzeczywistych pomiar\u00f3w. R\u00f3wnolegle dbam o wydajno\u015b\u0107 us\u0142ug nadrz\u0119dnych i zapewniam wystarczaj\u0105c\u0105 liczb\u0119 deskryptor\u00f3w plik\u00f3w, aby nie dochodzi\u0142o do sztucznych <strong>Ograniczenia<\/strong> wykorzysta\u0107. Testy por\u00f3wnawcze pokazuj\u0105, \u017ce starannie dostosowane platformy zapewniaj\u0105 w tym zakresie rzeczywiste korzy\u015bci i niezawodnie obs\u0142uguj\u0105 szczytowe nat\u0119\u017cenie ruchu <strong>przechwycenie<\/strong>.<\/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\/08\/nginx_worker_connections_performance_2394.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Pami\u0119\u0107, buforowanie i \u015bcie\u017cki wej\u015bcia\/wyj\u015bcia<\/h2>\n<p>Ka\u017cde po\u0142\u0105czenie zajmuje pami\u0119\u0107 operacyjn\u0105 na metadane i bufory. Dostosowuj\u0119 warto\u015bci proxy_buffers, client_body_buffer_size i large_client_header_buffers tak, aby pomie\u015bci\u0107 typowe \u017c\u0105dania, nie rezerwuj\u0105c przy tym zbyt du\u017cej ilo\u015bci pami\u0119ci RAM na wypadek warto\u015bci odstaj\u0105cych <strong>wi\u0105zanie<\/strong>. W przypadku tre\u015bci statycznych funkcje `sendfile` i `tcp_nopush` przyspieszaj\u0105 dostarczanie danych, natomiast `tcp_nodelay` sprawdza si\u0119 w przypadku kr\u00f3tkich odpowiedzi, dla kt\u00f3rych op\u00f3\u017anienie ma kluczowe znaczenie <strong>Wa\u017cne<\/strong> pozostaje. Je\u015bli zasoby znajduj\u0105 si\u0119 na wolniejszym no\u015bniku, funkcja aio wraz z opcjami threads i thread_pool pomaga z\u0142agodzi\u0107 efekty blokowania. Dzi\u0119ki open_file_cache ograniczam liczb\u0119 operacji na plikach i wywo\u0142a\u0144 funkcji stat(), nale\u017cy jednak pami\u0119ta\u0107 o dodatkowym zapotrzebowaniu na deskryptory plik\u00f3w (FD). Logi zapisuj\u0119 z buforowaniem (access_log \u2026 buffer=\u2026 flush=\u2026), aby szczytowe obci\u0105\u017cenia we\/wy nie wp\u0142ywa\u0142y na czasy odpowiedzi <strong>wp\u0142ywa\u0107 na<\/strong>.<\/p>\n\n<h2>R\u00f3wnowaga mi\u0119dzy bezpiecze\u0144stwem a wydajno\u015bci\u0105 protoko\u0142u TLS<\/h2>\n<p>Procesy uzgadniania TLS s\u0105 bardzo obci\u0105\u017caj\u0105ce dla procesora. \u0141\u0105cz\u0119 ponowne wykorzystanie sesji z umiarkowanymi parametrami kluczy i w\u0142\u0105czam optymalizacje warstwowe, takie jak pami\u0119ci podr\u0119czne sesji i bilety, o ile jest to uzasadnione z operacyjnego punktu widzenia <strong>dopasowanie<\/strong>. Optymalny kompromis mi\u0119dzy bezpiecze\u0144stwem a wydajno\u015bci\u0105 pozwala utrzyma\u0107 stabilne op\u00f3\u017anienia bez uszczerbku dla jako\u015bci szyfrowania. Przy wi\u0119kszym obci\u0105\u017ceniu obserwuj\u0119 osobno 95. i 99. percentyl, poniewa\u017c w przeciwnym razie szczytowe warto\u015bci TLS pozostawa\u0142yby ukryte za warto\u015bciami \u015brednimi <strong>ukrycie<\/strong>. Protok\u00f3\u0142 HTTP\/2 zmniejsza liczb\u0119 po\u0142\u0105cze\u0144, wymaga jednak staranno\u015bci w zakresie kontroli przep\u0142ywu danych i kompresji nag\u0142\u00f3wk\u00f3w, aby utrzyma\u0107 pod kontrol\u0105 obci\u0105\u017cenie procesora i pami\u0119ci <strong>zachowa\u0107<\/strong>.<\/p>\n\n<h2>Odporno\u015b\u0107 w warunkach przeci\u0105\u017cenia: granice i \u0142agodne odci\u0105\u017canie<\/h2>\n<p>Aby zachowa\u0107 poufno\u015b\u0107, konieczne jest celowe <strong>Kszta\u0142towanie<\/strong> niezb\u0119dne w okresach szczytowego obci\u0105\u017cenia. Za pomoc\u0105 parametru `limit_conn` ograniczam liczb\u0119 r\u00f3wnoleg\u0142ych po\u0142\u0105cze\u0144 na klucz (np. adres IP lub sesja), a parametr `limit_req` ogranicza obci\u0105\u017cenie impulsowe i chroni serwery zaplecza przed synchronicznymi <strong>Sztormy<\/strong>. Punkty krytyczne izoluj\u0119, stosuj\u0105c bardziej rygorystyczne zasady ni\u017c w przypadku zasob\u00f3w statycznych. Je\u015bli obci\u0105\u017cenie wzro\u015bnie nagle, zwracam jasno zdefiniowane kody b\u0142\u0119d\u00f3w 429\/503 z parametrem \u201eRetry-After\u201d, zamiast r\u00f3wnomiernie rozdziela\u0107 wszystkie \u017c\u0105dania <strong>umrze\u0107 z g\u0142odu<\/strong> . Zatrzymuj\u0119 po\u0142\u0105czenia, kt\u00f3re si\u0119 przed\u0142u\u017caj\u0105 (lingering_close), aby w kontrolowany spos\u00f3b zwolni\u0107 zasoby i zapobiec wzorcom typu Slowloris <strong>obali\u0107<\/strong>. To aktywne odci\u0105\u017canie utrzymuje op\u00f3\u017anienie p95\/p99 w dopuszczalnym zakresie, nawet je\u015bli ca\u0142kowite zapotrzebowanie chwilowo przekracza nominaln\u0105 przepustowo\u015b\u0107 <strong>k\u0142amstwa<\/strong>.<\/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\/08\/hosting-performance-9047.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Integracja kontener\u00f3w i system\u00f3w: znoszenie ogranicze\u0144 tam, gdzie si\u0119 pojawiaj\u0105<\/h2>\n<p>W kontenerach cz\u0119sto obowi\u0105zuj\u0105 bardziej restrykcyjne ograniczenia. Sprawdzam limity cgroup (CPU, RAM), odpowiednio ustawiam opcj\u0119 ulimit -n wewn\u0105trz kontenera i definiuj\u0119 LimitNOFILE w definicji us\u0142ugi. Parametry sysctl, takie jak somaxconn i tcp_max_syn_backlog, musz\u0105 by\u0107 ustawione na <strong>Gospodarz<\/strong> zaczynaj\u0105 obowi\u0105zywa\u0107; przestrzenie nazw nie zawsze izoluj\u0105 te ustawienia w spos\u00f3b przejrzysty. Na platformach orkiestrowanych planuj\u0119 pojemno\u015b\u0107 na pod\/w\u0119ze\u0142, przypisuj\u0119 procesy robocze do przydzielonych rdzeni i dbam o stabilne \u015bcie\u017cki sieciowe (np. bez zb\u0119dnych przeskok\u00f3w NAT), aby krzywa op\u00f3\u017anienia <strong>spok\u00f3j<\/strong> pozostaje. Aktualizacje typu rolling update zabezpieczam za pomoc\u0105 worker_shutdown_timeout, aby istniej\u0105ce po\u0142\u0105czenia zosta\u0142y poprawnie zamkni\u0119te <strong>wycofa\u0107 si\u0119<\/strong>.<\/p>\n\n<h2>Monitorowanie i optymalizacja iteracyjna<\/h2>\n<p>Bez widoczno\u015bci dzia\u0142ania zwi\u0105zane z tuningiem pozostaj\u0105 <strong>Ryzyko<\/strong>. W\u0142\u0105czam modu\u0142 `stub_status` lub jego alternatywy, aby na bie\u017c\u0105co monitorowa\u0107 aktywne po\u0142\u0105czenia, wska\u017aniki akceptacji i odrzucenia. W testach obci\u0105\u017ceniowych symuluj\u0119 realistyczne wzorce dost\u0119pu i identyfikuj\u0119 w\u0105skie gard\u0142a w kolejkach akceptacji, op\u00f3\u017anieniach upstream lub obci\u0105\u017ceniu procesora (CPU) \u2013<strong>Nasycenie<\/strong>. Nast\u0119pnie ostro\u017cnie dostosowuj\u0119 liczb\u0119 po\u0142\u0105cze\u0144 worker_connections, liczb\u0119 proces\u00f3w, limity plik\u00f3w oraz parametry TCP i ponownie sprawdzam efekt. Ten cykl zapewnia niezawodne dzia\u0142anie platformy i zapobiega nieoczekiwanym sytuacjom w niekorzystnych <strong>Czasy<\/strong>.<\/p>\n\n<h2>Przyk\u0142adowa konfiguracja i spos\u00f3b oblicze\u0144<\/h2>\n<p>Za\u0142\u00f3\u017cmy, \u017ce w godzinach szczytu spodziewam si\u0119 2000 r\u00f3wnoczesnych \u017c\u0105da\u0144 w trakcie przetwarzania i korzystam z serwera proxy odwrotnego \u2013 w takim przypadku szacuj\u0119 z grubsza 4000 slot\u00f3w po\u0142\u0105cze\u0144 plus <strong>Bufor<\/strong>. Je\u015bli NGINX dzia\u0142a na czterech rdzeniach procesora, ustawiam na pocz\u0105tek np. `worker_processes auto` oraz `worker_connections` od 1000 do 2000 na ka\u017cdy proces roboczy. Limit deskryptor\u00f3w plik\u00f3w ustalam na wystarczaj\u0105co wysokim poziomie dla ka\u017cdego procesu roboczego, aby po\u0142\u0105czenia, logi i wewn\u0119trzne gniazda mia\u0142y wystarczaj\u0105co du\u017co <strong>Miejsce<\/strong> . Blok Events ustawiam na epoll, w\u0142\u0105czam multi_accept i zwi\u0119kszam backlogi j\u0105dra odpowiednio do mojego szczytowego ruchu. Minimalistyczny fragment mo\u017ce wygl\u0105da\u0107 tak, a nast\u0119pnie dopracowuj\u0119 go za pomoc\u0105 test\u00f3w wydajno\u015bciowych <strong>G\u0142osowanie<\/strong>:<\/p>\n<pre><code>worker_processes  auto;\nworker_rlimit_nofile  65535;\n\nevents {\n    use epoll;\n    worker_connections  2048;\n    multi_accept on;\n}\n\nhttp {\n    keepalive_timeout   65;\n    sendfile on;\n    # dodatkowe opcje proxy\/pami\u0119ci podr\u0119cznej ...\n}\n<\/code><\/pre>\n<p>Dodatkowo wprowadzam optymalizacje list i przep\u0142ywu danych w g\u00f3r\u0119, aby udoskonali\u0107 \u015bcie\u017ck\u0119 przyjmowania danych i \u015bcie\u017ck\u0119 zaplecza pod obci\u0105\u017ceniem:<\/p>\n<pre><code>events {\n    use epoll;\n    worker_connections 4096;\n    # worker_cpu_affinity auto;  # w razie potrzeby przypisz rdzenie na sta\u0142e\n}\n\nhttp {\n    # Przyk\u0142adowe optymalizacje TLS\/sesji\n    ssl_session_cache    shared:SSL:50m;\n    ssl_session_timeout  1h;\n\n upstream app_backend {\n server 10.0.0.11:8080;\n server 10.0.0.12:8080;\n keepalive 64;\n    }\n\n    server {\n listen 443 ssl http2 reuseport backlog=65535;\n\n location \/ {\n proxy_pass http:\/\/app_backend;\n proxy_connect_timeout     2s;\n            proxy_read_timeout 15s;\n proxy_next_upstream error timeout http_502 http_503;\n proxy_next_upstream_tries 2;\n }\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\/08\/developer_desk_nginx_5823.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>W skr\u00f3cie: konkretne warto\u015bci orientacyjne<\/h2>\n<p>Dostosowuj\u0119 liczb\u0119 proces\u00f3w roboczych (worker_processes) do liczby rdzeni procesora, a liczb\u0119 po\u0142\u0105cze\u0144 roboczych (worker_connections) zazwyczaj ustawiam na warto\u015b\u0107 z przedzia\u0142u od 1024 do <strong>4096<\/strong>. W przypadku serwera proxy odwrotnego planuj\u0119 dwa po\u0142\u0105czenia na ka\u017cde \u017c\u0105danie i zapewniam co najmniej dwukrotny zapas w stosunku do zmierzonej warto\u015bci szczytowej<strong>Obci\u0105\u017cenie<\/strong>. Ustawiam warto\u015bci `worker_rlimit_nofile` oraz limity systemowe na wystarczaj\u0105co wysokie, aby warto\u015bci z pliku `nginx.conf` pozosta\u0142y faktycznie u\u017cyteczne. Blok `events` ograniczam do `epoll` i `multi_accept`, podczas gdy zaleg\u0142o\u015bci j\u0105dra radz\u0105 sobie z kr\u00f3tkotrwa\u0142ymi szczytami ruchu <strong>amortyzowa\u0107<\/strong>. Dzi\u0119ki monitorowaniu i stopniowym dostosowaniom tworz\u0119 na tej podstawie niezawodny mechanizm generowania ruchu, kt\u00f3ry sprawnie obs\u0142uguje rosn\u0105c\u0105 liczb\u0119 odwiedzin <strong>no\u015bniki<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak prawid\u0142owo skonfigurowa\u0107 po\u0142\u0105czenia worker\u00f3w w NGINX, aby bezpiecznie skalowa\u0107 serwer NGINX i zmaksymalizowa\u0107 wydajno\u015b\u0107 hostingu przy tysi\u0105cach \u017c\u0105da\u0144.<\/p>","protected":false},"author":1,"featured_media":20715,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-20722","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":"122","_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 worker","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":"20715","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20722","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=20722"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20722\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/20715"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=20722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=20722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=20722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}