{"id":20906,"date":"2026-08-22T18:18:36","date_gmt":"2026-08-22T16:18:36","guid":{"rendered":"https:\/\/webhosting.de\/nginx-sendfile-tcp-nopush-ratgeber-performance-setup\/"},"modified":"2026-08-22T18:18:36","modified_gmt":"2026-08-22T16:18:36","slug":"nginx-sendfile-tcp-nopush-poradnik-wydajnosc-konfiguracja","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/nginx-sendfile-tcp-nopush-ratgeber-performance-setup\/","title":{"rendered":"Prawid\u0142owe wykorzystanie funkcji `sendfile` i `tcp_nopush` w NGINX w celu uzyskania maksymalnej wydajno\u015bci"},"content":{"rendered":"<p>Z <strong>nginx sendfile<\/strong> oraz <strong>tcp_nopush<\/strong> Przesy\u0142am pliki statyczne metod\u0105 \u201ezero-copy\u201d z systemu plik\u00f3w do gniazda, co pozwala zauwa\u017calnie zmniejszy\u0107 obci\u0105\u017cenie procesora oraz liczb\u0119 pakiet\u00f3w. Przy prawid\u0142owych ustawieniach obie dyrektywy zwi\u0119kszaj\u0105 wydajno\u015b\u0107 transmisji, zmniejszaj\u0105 obci\u0105\u017cenie systemowe i stanowi\u0105 podstaw\u0119 do prawid\u0142owej optymalizacji serwera nginx w zakresie zasob\u00f3w i plik\u00f3w do pobrania.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Zero-Copy<\/strong> za pomoc\u0105 funkcji sendfile: mniej kopii, wi\u0119ksza przepustowo\u015b\u0107<\/li>\n  <li><strong>tcp_nopush<\/strong> buforuje pakiety: wi\u0119ksze ramki, mniejsze obci\u0105\u017cenie<\/li>\n  <li><strong>Po\u0142\u0105czenie<\/strong> liczy si\u0119: sendfile + tcp_nopush + tcp_nodelay<\/li>\n  <li><strong>Przypadki u\u017cycia<\/strong> ustali\u0107 priorytety: zasoby statyczne, du\u017ce pliki do pobrania<\/li>\n  <li><strong>Testy<\/strong> w przypadku NFS\/SMB: zmierzy\u0107 wp\u0142yw, w razie potrzeby wy\u0142\u0105czy\u0107 sendfile<\/li>\n<\/ul>\n\n<h2>Dlaczego funkcja `sendfile` zapewnia tak du\u017c\u0105 wydajno\u015b\u0107 w serwerze NGINX<\/h2>\n\n<p>Aktywuj\u0119 <strong>sendfile<\/strong>, poniewa\u017c j\u0105dro mo\u017ce wysy\u0142a\u0107 pliki bezpo\u015brednio przez stos sieciowy, bez konieczno\u015bci wykonywania dodatkowych operacji kopiowania w przestrzeni u\u017cytkownika. Ta \u015bcie\u017cka typu \u201ezero-copy\u201d ogranicza zmiany kontekstu i oszcz\u0119dza cykle procesora, zw\u0142aszcza gdy wielu klient\u00f3w jednocze\u015bnie pobiera tre\u015bci statyczne. Korzy\u015bci odnosz\u0105 du\u017ce pliki, takie jak obrazy, CSS, JavaScript czy archiwa, poniewa\u017c transfer danych przebiega bardziej p\u0142ynnie i przy mniejszym obci\u0105\u017ceniu. R\u00f3wnie\u017c pami\u0119ci podr\u0119czne systemu dzia\u0142aj\u0105 wydajniej, poniewa\u017c wyst\u0119puje mniej operacji pami\u0119ciowych, a j\u0105dro kontroluje \u015bcie\u017ck\u0119 danych. Korzy\u015bci s\u0105 najbardziej widoczne w lokalnych systemach plik\u00f3w, dlatego najpierw dokonuj\u0119 pomiar\u00f3w w\u0142a\u015bnie tam, zanim przejd\u0119 do bardziej nietypowych konfiguracji.<\/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-server-setup-8934.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Czym dok\u0142adnie zajmuje si\u0119 tcp_nopush i kiedy najlepiej si\u0119 sprawdza<\/h2>\n\n<p>Z <strong>tcp_nopush<\/strong> Prosz\u0119 system, aby wysy\u0142a\u0142 pakiety TCP dopiero wtedy, gdy s\u0105 one odpowiednio wype\u0142nione, zamiast wysy\u0142a\u0107 zbyt wcze\u015bnie ma\u0142e segmenty. W systemie Linux odpowiada to opcji TCP_CORK, w systemie FreeBSD \u2013 TCP_NOPUSH, a w obu przypadkach liczba pakiet\u00f3w zmniejsza si\u0119 w spos\u00f3b wymierny. Dyrektywa ta nie sprowadza op\u00f3\u017anienia do minimum, ale ma na celu uzyskanie lepszego stosunku danych u\u017cytkowych do obci\u0105\u017cenia dodatkowego. Celowo stosuj\u0119 tcp_nopush w przypadku plik\u00f3w statycznych, poniewa\u017c w\u0142a\u015bnie tam sp\u00f3jne strumienie danych zapewniaj\u0105 najwi\u0119kszy wzrost wydajno\u015bci. Bez sendfile tcp_nopush pozostaje bezskuteczny, dlatego zawsze w\u0142\u0105czam oba ustawienia razem.<\/p>\n\n<h2>sendfile i tcp_nopush w parze: tak ustalam podstawy<\/h2>\n\n<p>Po\u0142\u0105czenie <strong>sendfile<\/strong> a opcja tcp_nopush ogranicza liczb\u0119 kopii i grupuje pakiety, dzi\u0119ki czemu jeden serwer na rdze\u0144 procesora mo\u017ce obs\u0142u\u017cy\u0107 znacznie wi\u0119cej r\u00f3wnoleg\u0142ych transfer\u00f3w. Konfiguruj\u0119 obie te opcje na poziomie kontekstu http i cz\u0119sto dodaj\u0119 jeszcze tcp_nodelay, aby ostatnia cz\u0119\u015b\u0107 strumienia mog\u0142a przep\u0142yn\u0105\u0107 bez op\u00f3\u017anie\u0144. Wa\u017cne jest przeprowadzanie test\u00f3w z wykorzystaniem rzeczywistego ruchu, poniewa\u017c rozmiary pakiet\u00f3w, MTU i klienci r\u00f3\u017cni\u0105 si\u0119, a optymalna r\u00f3wnowaga mo\u017ce si\u0119 nieznacznie zmienia\u0107 w zale\u017cno\u015bci od obci\u0105\u017cenia. W przypadku katalog\u00f3w statycznych zazwyczaj wystarcza aktywacja globalna, natomiast w przypadku dynamicznych tras odpowiedzi zwracam uwag\u0119 na skutki tej konfiguracji. Takie po\u0142\u0105czenie stanowi solidn\u0105 podstaw\u0119 dla dalszych krok\u00f3w optymalizacji nginx, kt\u00f3re zostan\u0105 wprowadzone w p\u00f3\u017aniejszym etapie.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>dyrektywa<\/th>\n      <th>Cel<\/th>\n      <th>Typowe dzia\u0142anie<\/th>\n      <th>Uzale\u017cnienie<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>w\u0142\u0105cz sendfile<\/strong><\/td>\n      <td>Zero-Copy z pliku do gniazda<\/td>\n      <td>Mniejsze obci\u0105\u017cenie procesora, wi\u0119ksza przepustowo\u015b\u0107<\/td>\n      <td>Lokalny system plik\u00f3w \u2013 idealne rozwi\u0105zanie<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>tcp_nopush w\u0142\u0105czone<\/strong><\/td>\n      <td>Wype\u0142nia\u0107 paczki, obni\u017ca\u0107 koszty og\u00f3lne<\/td>\n      <td>Mniejsza liczba segment\u00f3w na plik<\/td>\n      <td>Dzia\u0142a tylko z funkcj\u0105 `sendfile`<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>tcp_nodelay w\u0142\u0105czone<\/strong><\/td>\n      <td>Wysy\u0142anie ostatnich bajt\u00f3w bez oczekiwania<\/td>\n      <td>Szybkie zako\u0144czenie transferu<\/td>\n      <td>Dodano tcp_nopush<\/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\/08\/nginx_performance_meeting_8371.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>W ten spos\u00f3b tcp_nodelay wsp\u00f3\u0142dzia\u0142a z tcp_nopush<\/h2>\n\n<p>Aktywuj\u0119 <strong>tcp_nopush<\/strong>, aby wys\u0142a\u0107 pocz\u0105tek transferu w wi\u0119kszych pakietach, a jednocze\u015bnie w\u0142\u0105czy\u0107 opcj\u0119 tcp_nodelay, aby zako\u0144czenie transferu nie utkn\u0119\u0142o. Oba ustawienia oddzia\u0142uj\u0105 na r\u00f3\u017cne fazy przep\u0142ywu danych i nie koliduj\u0105 ze sob\u0105, gdy NGINX dostarcza pliki za pomoc\u0105 funkcji sendfile. Szczeg\u00f3lnie w przypadku wielu ma\u0142ych plik\u00f3w opcja tcp_nodelay zapobiega niepotrzebnemu oczekiwaniu klienta z powodu niewielkiej ilo\u015bci pozosta\u0142ych danych. Najpierw testuj\u0119 t\u0119 kombinacj\u0119 w \u015brodowisku stagingowym, obserwuj\u0119 czasy RTT i rozmiary segment\u00f3w, a nast\u0119pnie por\u00f3wnuj\u0119 je z metrykami z \u015brodowiska produkcyjnego. W ten spos\u00f3b zapewniam wydajno\u015b\u0107 na pocz\u0105tku i szybko\u015b\u0107 na ko\u0144cu transferu.<\/p>\n\n<pre><code>http {\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n}\n<\/code><\/pre>\n\n<h2>Typowe scenariusze zastosowania: sytuacje, w kt\u00f3rych dyrektywy maj\u0105 silny wp\u0142yw<\/h2>\n\n<p>Dla du\u017cych <strong>Pliki do pobrania<\/strong> W przypadku plik\u00f3w takich jak filmy, archiwa czy obrazy ISO \u015bcie\u017cka \u201ezero-copy\u201d j\u0105dra znacznie skraca czas przetwarzania przez procesor na ka\u017cdy transfer. W konfiguracjach podobnych do CDN, zawieraj\u0105cych wiele plik\u00f3w CSS, JS i czcionek, funkcja tcp_nopush pozwala zaoszcz\u0119dzi\u0107 segmenty, zwi\u0119kszaj\u0105c w ten spos\u00f3b wykorzystywan\u0105 przepustowo\u015b\u0107 na ka\u017cdy gniazd. Na stronach WordPress z dobrze zoptymalizowanym buforowaniem wi\u0119kszo\u015b\u0107 \u017c\u0105da\u0144 dotyczy zasob\u00f3w statycznych, dlatego efekt ten wida\u0107 tam bardzo szybko. Korzy\u015bci odnosz\u0105 r\u00f3wnie\u017c artefakty kompilacji, obrazy kontener\u00f3w lub instalatory, o ile znajduj\u0105 si\u0119 lokalnie, a nie s\u0105 dostarczane przez niestabilny system plik\u00f3w sieciowy. Kto spodziewa si\u0119 szczyt\u00f3w obci\u0105\u017cenia, dzi\u0119ki tej parze rozwi\u0105za\u0144 uzyska du\u017c\u0105 stabilno\u015b\u0107 z dost\u0119pnego sprz\u0119tu.<\/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-performance-optimization-2378.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Przyk\u0142ad praktyczny: NGINX dla WordPressa z buforowaniem i zasobami<\/h2>\n\n<p>W konfiguracjach WordPressa ustawiam <strong>sendfile<\/strong>, tcp_nopush i tcp_nodelay ustawione globalnie, zasoby statyczne dostarczam bezpo\u015brednio, a PHP-FPM dla \u015bcie\u017cek dynamicznych utrzymuj\u0119 w ca\u0142kowitej separacji. Dodaj\u0119 sensowne nag\u0142\u00f3wki pami\u0119ci podr\u0119cznej dla obraz\u00f3w, arkuszy CSS i skrypt\u00f3w JavaScript, aby przegl\u0105darki generowa\u0142y mniej cykli wymiany danych. W przypadku dostarczania odpowiedzi typu strumieniowego zwracam uwag\u0119 na interakcj\u0119 z buforowaniem i testuj\u0119, jak rozmiary fragment\u00f3w wp\u0142ywaj\u0105 na op\u00f3\u017anienie i przepustowo\u015b\u0107; w tym kontek\u015bcie przydatny jest przegl\u0105d dotycz\u0105cy <a href=\"https:\/\/webhosting.de\/pl\/http-response-streaming-hosting-performance-chunks\/\">Strumieniowe przesy\u0142anie odpowiedzi w cz\u0119\u015bciach<\/a>. W przypadku tre\u015bci tekstowych stosuj\u0119 kompresj\u0119, unikaj\u0105c jednak niepotrzebnego kompresowania plik\u00f3w binarnych. Dzi\u0119ki temu przep\u0142yw \u017c\u0105da\u0144 pozostaje stabilny, obci\u0105\u017cenie procesora jest niewielkie, a czas do pierwszego bajtu (Time-to-First-Byte) jest kr\u00f3tki.<\/p>\n\n<pre><code>http {\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n\n keepalive_timeout 65;\n    gzip on;\n    gzip_types text\/css application\/javascript image\/svg+xml;\n\n    server {\n listen 80;\n server_name blog.example.com;\n root \/var\/www\/blog;\n\n location \/ {\n try_files $uri $uri\/ \/index.php?$args;\n }\n\n        location ~ \\.php$ {\n include fastcgi_params;\n fastcgi_pass unix:\/run\/php\/php-fpm.sock;\n            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n }\n\n location ~* \\.(jpg|jpeg|png|gif|css|js|ico|svg|woff2?)$ {\n expires 30d;\n add_header Cache-Control \"public, max-age=2592000\";\n }\n    }\n}\n<\/code><\/pre>\n\n<h2>Kiedy celowo wy\u0142\u0105czam funkcj\u0119 `sendfile`<\/h2>\n\n<p>Prze\u0142\u0105czam <strong>sendfile<\/strong> gdy pliki znajduj\u0105 si\u0119 w systemach NFS, SMB lub rozproszonych systemach plik\u00f3w, kt\u00f3re w moich testach wykaza\u0142y gorsz\u0105 przepustowo\u015b\u0107. Niekt\u00f3re sterowniki lub op\u00f3\u017anienia w \u015bcie\u017cce pami\u0119ci masowej niweluj\u0105 korzy\u015bci p\u0142yn\u0105ce z technologii Zero-Copy, dlatego decyduj\u0105ce znaczenie maj\u0105 pomiary. W przypadku sporadycznych anomalii sieciowych najpierw wy\u0142\u0105czam tcp_nopush, aby ograniczy\u0107 skutki, zanim zaczn\u0119 kwestionowa\u0107 sam\u0105 funkcj\u0119 sendfile. R\u00f3wnie\u017c nietypowe b\u0142\u0119dy j\u0105dra lub starsze stosy mog\u0105 by\u0107 powodem tymczasowego przej\u015bcia na klasyczn\u0105 \u015bcie\u017ck\u0119 odczytu i zapisu. Wa\u017cne jest, aby wprowadzanie zmian odbywa\u0142o si\u0119 stopniowo i by\u0142o poparte danymi pomiarowymi.<\/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_performance_3456.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>\u0179r\u00f3d\u0142a b\u0142\u0119d\u00f3w, na kt\u00f3re zwracam uwag\u0119<\/h2>\n\n<p>Najpierw sprawdzam, czy <strong>tcp_nopush<\/strong> jest przypadkowo w\u0142\u0105czona, podczas gdy sendfile pozostaje wy\u0142\u0105czone, poniewa\u017c w takim przypadku to ustawienie nie przynosi \u017cadnego efektu. W przypadku \u015bcie\u017cek dynamicznych obserwuj\u0119, czy dodatkowe buforowanie zwi\u0119ksza op\u00f3\u017anienie, i rozwa\u017cam korzy\u015bci w stosunku do czasu reakcji. W sieciach o wysokim op\u00f3\u017anieniu sprawdzam, czy wi\u0119ksze pakiety rzeczywi\u015bcie pomagaj\u0105, czy te\u017c musz\u0119 dopracowa\u0107 rozmiary segment\u00f3w i ustawienia Keep-Alive. R\u00f3wnie\u017c konfiguracja MTU oraz funkcje odci\u0105\u017cania karty sieciowej mog\u0105 wyra\u017anie wp\u0142yn\u0105\u0107 na wynik. Przejrzyste logi, pr\u00f3bki pcap oraz skorelowane metryki systemowe szybko wskazuj\u0105 mi, gdzie nale\u017cy wprowadzi\u0107 korekty.<\/p>\n\n<h2>Kompleksowe podej\u015bcie do wydajno\u015bci NGINX: kolejne elementy regulacyjne<\/h2>\n\n<p>Opr\u00f3cz <strong>sendfile<\/strong> Op\u0142aca si\u0119 ustawi\u0107 odpowiedni\u0105 liczb\u0119 worker_processes i worker_connections, aby nie ogranicza\u0107 sztucznie liczby gniazd. W systemie Linux korzystam z epoll i dbam o wystarczaj\u0105c\u0105 liczb\u0119 deskryptor\u00f3w plik\u00f3w, aby szczyty obci\u0105\u017cenia nie powodowa\u0142y w\u0105skich garde\u0142. W przypadku tre\u015bci tekstowych w\u0142\u0105czam gzip lub Brotli i sprawdzam, czy poziom kompresji nie obci\u0105\u017ca nadmiernie procesora. Na poziomie transportu utrzymuj\u0119 po\u0142\u0105czenia otwarte przez d\u0142u\u017cszy czas i optymalizuj\u0119 Keep-Alive, co opisano w przewodniku <a href=\"https:\/\/webhosting.de\/pl\/http-keep-alive-tuning-obciazenie-serwera-optymalizacja-wydajnosci-przeplyw\/\">Optymalizacja Keep-Alive<\/a> dostarcza praktycznych wskaz\u00f3wek. Protok\u00f3\u0142 TLS, ponowne wykorzystanie sesji oraz HTTP\/2 lub HTTP\/3 dope\u0142niaj\u0105 t\u0119 konfiguracj\u0119 i zapewniaj\u0105 wysoki poziom r\u00f3wnoleg\u0142o\u015bci przy umiarkowanym op\u00f3\u017anieniu.<\/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_performance_4203.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ograniczenia i przypadki szczeg\u00f3lne: TLS, HTTP\/2\/3 i proxy<\/h2>\n\n<p>Bior\u0119 pod uwag\u0119, \u017ce <strong>sendfile<\/strong> technicznie dotyczy to wy\u0142\u0105cznie niezaszyfrowanych \u015bcie\u017cek do plik\u00f3w lub specjalnych funkcji j\u0105dra. W przypadku klasycznego TLS NGINX szyfruje bajty w przestrzeni u\u017cytkownika, co powoduje utrat\u0119 korzy\u015bci wynikaj\u0105cych z technologii zero-copy; nowoczesne j\u0105dra mog\u0105 cz\u0119\u015bciowo przenie\u015b\u0107 szyfrowanie do j\u0105dra, co przywraca ten efekt, ale nie jest to dost\u0119pne w ka\u017cdej konfiguracji. W przypadku <strong>HTTP\/2<\/strong> dane s\u0105 przechowywane w ramkach, kilka odpowiedzi wsp\u00f3\u0142dzieli jedno po\u0142\u0105czenie TCP, a NGINX aktywnie pakuje bajty \u2013 w tym przypadku sendfile ma mniejsze znaczenie. <strong>HTTP\/3<\/strong> opiera si\u0119 na protokole UDP\/QUIC i zn\u00f3w dzia\u0142a wed\u0142ug innych zasad, wi\u0119c wzrost wydajno\u015bci osi\u0105gam raczej dzi\u0119ki buforom, kontroli przeci\u0105\u017cenia i odpowiednio dobranym rozmiarom fragment\u00f3w. Jako <strong>Odwrotne proxy<\/strong> funkcja sendfile dzia\u0142a tylko wtedy, gdy faktycznie udost\u0119pniam pliki z lokalnego systemu plik\u00f3w; odpowiedzi z <em>proxy_pass<\/em> lub <em>fastcgi_pass<\/em> i tak przechodz\u0105 przez przestrze\u0144 u\u017cytkownika. Dlatego \u015bci\u015ble oddzielam zasoby od \u015bcie\u017cki dynamicznej, aby w jak najwi\u0119kszym stopniu wykorzysta\u0107 metod\u0119 \u201ezero-copy\u201d.<\/p>\n\n<h2>W\u0142a\u015bciwe zrozumienie kompresji: gzip\/Brotli a gzip_static<\/h2>\n\n<p>Gdy NGINX kompresuje tre\u015bci w locie, musi odczyta\u0107 plik, przetworzy\u0107 go i zapisa\u0107 wynik \u2013 przy czym traci <strong>sendfile<\/strong> swoj\u0105 zalet\u0119. W przypadku zasob\u00f3w statycznych korzystam wi\u0119c, tam gdzie to mo\u017cliwe, <em>wst\u0119pnie skompresowane<\/em> Pliki (np. .gz lub .br) i przekazuj\u0119 je bezpo\u015brednio do dostarczenia. W ten spos\u00f3b zachowana zostaje \u015bcie\u017cka \u201ezero-copy\u201d, poniewa\u017c NGINX mo\u017ce przekaza\u0107 wst\u0119pnie skompresowany plik tak samo jak ka\u017cdy inny zas\u00f3b. W przypadku tre\u015bci tekstowych, rzadko modyfikowanych, osi\u0105gam w ten spos\u00f3b oszcz\u0119dno\u015b\u0107 mocy obliczeniowej procesora oraz stabiln\u0105 przepustowo\u015b\u0107 bez utraty czasu transmisji. W przypadku plik\u00f3w binarnych i format\u00f3w ju\u017c skompresowanych unikam kompresji w czasie wykonywania \u2013 tutaj liczy si\u0119 wy\u0142\u0105cznie przepustowo\u015b\u0107 operacji wej\u015bcia\/wyj\u015bcia, a funkcje `sendfile` oraz `tcp_nopush` w pe\u0142ni wykorzystuj\u0105 swoje zalety.<\/p>\n\n<h2>AIO, directio i Page Cache: wzorce dla ma\u0142ych i du\u017cych plik\u00f3w<\/h2>\n\n<p>\u0141\u0105cz\u0119 <strong>sendfile<\/strong> z asynchronicznym wej\u015bciem\/wyj\u015bciem i bezpo\u015brednim dost\u0119pem do dysku, aby osi\u0105gn\u0105\u0107 optymaln\u0105 wydajno\u015b\u0107 w zale\u017cno\u015bci od rozmiaru pliku. Ma\u0142e i \u015brednie pliki korzystaj\u0105 z pami\u0119ci podr\u0119cznej stron j\u0105dra i pozostaj\u0105 na \u015bcie\u017cce sendfile. Natomiast bardzo du\u017ce pliki mog\u0105 wyprze\u0107 t\u0119 pami\u0119\u0107 podr\u0119czn\u0105; w takim przypadku odczytuj\u0119 je celowo za pomoc\u0105 <em>kierunek<\/em> poza pami\u0119ci\u0105 podr\u0119czn\u0105 i korzystam z w\u0105tk\u00f3w AIO. Dzi\u0119ki temu odci\u0105\u017cam pami\u0119\u0107 i utrzymuj\u0119 niskie op\u00f3\u017anienia dla innych \u017c\u0105da\u0144. Typowy wzorzec wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n<pre><code>http {\n    # \u015acie\u017cka standardowa: Zero-Copy z pami\u0119ci podr\u0119cznej stron\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n\n # Du\u017ce pliki: pomijanie pami\u0119ci podr\u0119cznej i odczyt asynchroniczny\n    aio threads;\n    directio 4m; # dzia\u0142a tylko dla plik\u00f3w &gt;= 4 MiB\n    output_buffers 1 512k;    # Bufory dla \u015bcie\u017cek directio\n    sendfile_max_chunk 1m;    # R\u00f3wnowaga obci\u0105\u017cenia przy wysokim obci\u0105\u017ceniu\n}\n<\/code><\/pre>\n\n<p>Dzi\u0119ki takiemu roz\u0142o\u017ceniu ma\u0142e zasoby pozostaj\u0105 niezwykle wydajne, podczas gdy bardzo du\u017ce transfery nie przeci\u0105\u017caj\u0105 pami\u0119ci operacyjnej. Wa\u017cne: directio wy\u0142\u0105cza \u015bcie\u017ck\u0119 sendfile dla odpowiednich plik\u00f3w \u2013 dok\u0142adnie tak, jak zamierza\u0142em w przypadku obs\u0142ugi du\u017cych plik\u00f3w.<\/p>\n\n<h2>Sprawiedliwo\u015b\u0107 i kontrola przep\u0142ywu pod obci\u0105\u017ceniem<\/h2>\n\n<p>W okresach du\u017cego obci\u0105\u017cenia chc\u0119 unikn\u0105\u0107 sytuacji, w kt\u00f3rej pojedynczy strumie\u0144 monopolizuje procesor lub gniazdo. Ustawiam <strong>sendfile_max_chunk<\/strong>, aby NGINX zwraca\u0142 j\u0105dro po osi\u0105gni\u0119ciu okre\u015blonej liczby bajt\u00f3w i pozostawi\u0142 miejsce dla innych po\u0142\u0105cze\u0144. W zakresie zarz\u0105dzania przepustowo\u015bci\u0105 pomocne s\u0105 <em>limit_rate<\/em> oraz <em>limit_rate_after<\/em>, na przyk\u0142ad w celu ograniczenia pr\u0119dko\u015bci pobierania plik\u00f3w zbiorczych, podczas gdy zasoby interfejsu u\u017cytkownika dzia\u0142aj\u0105 sprawnie. Dzi\u0119ki <em>od\u0142\u00f3\u017c_wyj\u015bcie<\/em> ustalam, od jakiej wielko\u015bci odpowiedzi NGINX rozpocznie wysy\u0142anie \u2013 w po\u0142\u0105czeniu z opcj\u0105 tcp_nopush zapewniam w ten spos\u00f3b prawid\u0142owe dzielenie pakiet\u00f3w. Ponadto zwracam uwag\u0119 na <em>lingering_close<\/em>, aby pozosta\u0142e pakiety mog\u0142y zosta\u0107 poprawnie przes\u0142ane, a gniazdo nie zosta\u0142o nagle zamkni\u0119te.<\/p>\n\n<h2>Systemy plik\u00f3w, odczyt z wyprzedzeniem i \u015bcie\u017cki dost\u0119pu do pami\u0119ci masowej<\/h2>\n\n<p>Poniewa\u017c <strong>sendfile<\/strong> W przypadku korzystania z pami\u0119ci podr\u0119cznej stron du\u017c\u0105 rol\u0119 odgrywa system plik\u00f3w, na kt\u00f3rym opiera si\u0119 aplikacja. Sprawdzam warto\u015bci odczytu z wyprzedzeniem (Readahead) i ustawiam je tak, aby sekwencyjne operacje odczytu du\u017cych plik\u00f3w nie ulega\u0142y spowolnieniu, nie wypieraj\u0105c przy tym mniejszych zasob\u00f3w. Na <em>ext4<\/em> lub <em>xfs<\/em> Obserwuj\u0119, jak dobrze prefetching i harmonogram I\/O wsp\u00f3\u0142graj\u0105 z moim wzorcem przepustowo\u015bci. W przypadku system\u00f3w plik\u00f3w sieciowych (NFS\/SMB) rygorystycznie testuj\u0119 parametry rsize\/wsize, buforowanie i op\u00f3\u017anienia, poniewa\u017c nawet niewielkie odchylenia neutralizuj\u0105 korzy\u015bci p\u0142yn\u0105ce z technologii zero-copy. Moja zasada pozostaje niezmienna: najpierw maksymalnie wykorzysta\u0107 \u015bcie\u017cki lokalne, a dopiero potem ostro\u017cnie dostosowywa\u0107 stosy zewn\u0119trzne \u2013 i zawsze przedk\u0142ada\u0107 wyniki pomiar\u00f3w nad intuicj\u0119.<\/p>\n\n<h2>Pragmatyczne dostosowanie stosu sieciowego i odci\u0105\u017cania karty sieciowej<\/h2>\n\n<p>W przypadku du\u017cej liczby po\u0142\u0105cze\u0144 polegam na automatycznej regulacji bufor\u00f3w w nowoczesnych stosach, ale w razie potrzeby dostosowuj\u0119 bufory wysy\u0142ania i odbierania. Funkcje odci\u0105\u017cania karty sieciowej, takie jak TSO, GSO i GRO, zauwa\u017calnie zmniejszaj\u0105 obci\u0105\u017cenie procesora; podczas pomiar\u00f3w zachowuj\u0119 jednak ostro\u017cno\u015b\u0107, poniewa\u017c przechwycone pakiety mog\u0105 by\u0107 zafa\u0142szowane przez proces odci\u0105\u017cania (pozornie niewielka liczba bardzo du\u017cych segment\u00f3w). Dlatego koreluj\u0119 <em>pcap<\/em>\u2011Traces z metrykami z NGINX i j\u0105dra, aby oddzieli\u0107 rzeczywiste rozmiary pakiet\u00f3w od artefakt\u00f3w zwi\u0105zanych z offloadem. W przypadku skok\u00f3w op\u00f3\u017anie\u0144 na chwil\u0119 przerywam testy, wy\u0142\u0105czaj\u0105c offload, dokumentuj\u0119 r\u00f3\u017cnic\u0119, a nast\u0119pnie decyduj\u0119, co przyniesie wi\u0119ksze korzy\u015bci w trybie ci\u0105g\u0142ej pracy.<\/p>\n\n<h2>Szablony konfiguracyjne dla poszczeg\u00f3lnych lokalizacji: selektywne w\u0142\u0105czanie i wy\u0142\u0105czanie<\/h2>\n\n<p>Zostawiam sobie mo\u017cliwo\u015b\u0107, <strong>sendfile<\/strong> w zale\u017cno\u015bci od \u015bcie\u017cki lub typu pliku. W przypadku katalog\u00f3w statycznych pozostaje w\u0142\u0105czona, natomiast w przypadku \u015bcie\u017cek strumieniowych lub dynamicznych wy\u0142\u0105czam j\u0105 selektywnie, gdy priorytet maj\u0105 bufory lub filtry (np. kompresja). Kr\u00f3tki przyk\u0142ad:<\/p>\n\n<pre><code>server {\n    listen 80;\n    server_name static.example.com;\n    root \/var\/www\/static;\n\n # Zasoby statyczne: Zero-Copy\n    location \/assets\/ {\n sendfile on;\n tcp_nopush on;\n        tcp_nodelay on;\n expires 7d;\n    }\n\n # Tre\u015bci dynamiczne lub strumieniowanie: elastyczno\u015b\u0107 przed trybem Zero-Copy\n    location \/api\/ {\n sendfile off;\n proxy_pass http:\/\/app_upstream;\n    }\n}\n<\/code><\/pre>\n\n<p>To rozdzielenie zapobiega utracie korzy\u015bci z jednej strony tylko dlatego, \u017ce inna \u015bcie\u017cka stawia szczeg\u00f3lne wymagania.<\/p>\n\n<h2>Zakresy, wycinki i du\u017ce katalogi<\/h2>\n\n<p>W przypadku du\u017cych obiekt\u00f3w <strong>Zasi\u0119g<\/strong>-Wykorzystuj\u0119 zalety \u017c\u0105da\u0144: klient pobiera tylko niezb\u0119dne fragmenty, a po\u0142\u0105czenia pozostaj\u0105 stabilne. W katalogach tre\u015bci zawieraj\u0105cych bardzo du\u017ce pliki ch\u0119tnie dziel\u0119 transfery na logiczne segmenty \u2013 obci\u0105\u017cenie serwera rozk\u0142ada si\u0119 bardziej r\u00f3wnomiernie, a sytuacje awaryjne, takie jak przerwania, poch\u0142aniaj\u0105 mniej czasu. W scenariuszach buforowania zapobiegam zjawisku \u201eThundering Herds\u201c, sensownie buforuj\u0105c odpowiedzi, ale nie zatrzymuj\u0105c sztucznie ma\u0142ych fragment\u00f3w i pozosta\u0142ych danych. Kluczow\u0105 rol\u0119 odgrywa tu wsp\u00f3\u0142dzia\u0142anie z tcp_nopush: utrzymuj\u0119 du\u017ce segmenty pocz\u0105tkowe, ale nie pozwalam, by segmenty ko\u0144cowe czeka\u0142y.<\/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-performance-5678.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Strategia pomiarowa i testowa: wiarygodne wykazanie skutk\u00f3w<\/h2>\n\n<p>Optymalizacje popieram testami, kt\u00f3rych wyniki da si\u0119 powt\u00f3rzy\u0107. Po stronie serwera analizuj\u0119 profile wykorzystania procesora, <em>$request_time<\/em>, <em>1 TP 4 Tbajt\u00f3w wys\u0142anych<\/em>, aktywne po\u0142\u0105czenia i zmiany kontekstu. W sieci mierz\u0119 rozmiary segment\u00f3w, retransmisje i rozk\u0142ad RTT; koreluj\u0119 przechwycone pakiety ze statystykami gniazd, aby uwzgl\u0119dni\u0107 efekty odci\u0105\u017cenia. Po stronie klienta por\u00f3wnuj\u0119 TTFB, First Contentful Paint oraz czasy pobierania przy realistycznych warto\u015bciach RTT i przepustowo\u015bciach. Zmieniam MTU, ustawienia Keep-Alive oraz rozmiary plik\u00f3w, aby nie patrze\u0107 wy\u0142\u0105cznie na krzywe w najlepszym scenariuszu. Na koniec, na podstawie twardych danych liczbowych, oceniam, czy sendfile\/tcp_nopush zapewniaj\u0105 po\u017c\u0105dan\u0105 stabilno\u015b\u0107 i wydajno\u015b\u0107 w danym obci\u0105\u017ceniu \u2013 i dopracowuj\u0119 ustawienia, a\u017c tak si\u0119 stanie.<\/p>\n\n<h2>Szczeg\u00f3\u0142y protoko\u0142u HTTP, kt\u00f3re maj\u0105 znaczenie: Range i streaming<\/h2>\n\n<p>U\u017cywam <strong>Zasi\u0119g<\/strong>-\u017b\u0105dania dotycz\u0105ce du\u017cych plik\u00f3w, dzi\u0119ki czemu klienci pobieraj\u0105 tylko niezb\u0119dne fragmenty, a po\u0142\u0105czenia pozostaj\u0105 stabilne. Zw\u0142aszcza w przypadku przeskakiwania w filmach i wznawiania pobierania prawid\u0142owa obs\u0142uga zakres\u00f3w bajt\u00f3w pomaga w racjonalnym roz\u0142o\u017ceniu przepustowo\u015bci; dodatkowe informacje mo\u017cna znale\u017a\u0107 na stronie po\u015bwi\u0119conej <a href=\"https:\/\/webhosting.de\/pl\/zadania-zakresu-http-wydajnosc-hostingu-multimediow-i-pobierania-bajt\/\">\u017b\u0105dania HTTP typu Range<\/a>. W przypadku ci\u0105g\u0142ych odpowiedzi z rosn\u0105c\u0105 tre\u015bci\u0105 testuj\u0119 strategie strumieniowania i dbam o to, by bufory nie przechowywa\u0142y danych nieumy\u015blnie zbyt d\u0142ugo. Przy tym uwzgl\u0119dniam pami\u0119\u0107 podr\u0119czn\u0105 i ustawiam odpowiednie nag\u0142\u00f3wki, aby serwery proxy i przegl\u0105darki dzia\u0142a\u0142y poprawnie. Zwracam uwag\u0119 na interakcj\u0119 z tcp_nopush, poniewa\u017c rozmiary pakiet\u00f3w i czas wykonania operacji flush maj\u0105 bezpo\u015bredni wp\u0142yw na postrzegan\u0105 szybko\u015b\u0107 dzia\u0142ania.<\/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-performance-5678.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>Z <strong>sendfile<\/strong> W ten spos\u00f3b efektywnie przekazuj\u0119 pliki bezpo\u015brednio do j\u0105dra, a dzi\u0119ki tcp_nopush zapewniam sensowne wype\u0142nienie pakiet\u00f3w, zanim zaczn\u0105 obci\u0105\u017ca\u0107 \u0142\u0105cze. Obie dyrektywy wzajemnie si\u0119 uzupe\u0142niaj\u0105, podczas gdy tcp_nodelay dostarcza ostatni bajt bez op\u00f3\u017anienia. Sprawdzam dzia\u0142anie w warunkach rzeczywistego ruchu, zwracam uwag\u0119 na \u015bcie\u017ck\u0119 przechowywania, MTU, Keep-Alive i kompresj\u0119 oraz konsekwentnie dokonuj\u0119 pomiar\u00f3w. W przypadku obci\u0105\u017ce\u0144 typu WordPress i CDN korzy\u015bci s\u0105 widoczne szczeg\u00f3lnie szybko, poniewa\u017c wiele \u017c\u0105da\u0144 dotyczy zasob\u00f3w statycznych. Kto celowo wykorzystuje te ustawienia, osi\u0105ga wi\u0119ksz\u0105 przepustowo\u015b\u0107 na rdze\u0144, zmniejsza obci\u0105\u017cenie systemowe i tworzy rezerwy na rzeczywiste szczyty obci\u0105\u017cenia.<\/p>","protected":false},"excerpt":{"rendered":"<p>Praktyczny przewodnik po konfiguracji funkcji sendfile i tcp_nopush w NGINX w celu uzyskania maksymalnej wydajno\u015bci podczas dostarczania plik\u00f3w statycznych i du\u017cych plik\u00f3w do pobrania.<\/p>","protected":false},"author":1,"featured_media":20899,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[834],"tags":[],"class_list":["post-20906","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":"157","_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 sendfile","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":"20899","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20906","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=20906"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20906\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/20899"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=20906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=20906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=20906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}