{"id":2171,"date":"2026-07-30T11:14:00","date_gmt":"2026-07-30T10:14:00","guid":{"rendered":"https:\/\/jalvo.eu\/ttfb-reverse-proxy-czy-proxy-spowalnia-strone\/"},"modified":"2026-09-25T00:16:55","modified_gmt":"2026-09-24T23:16:55","slug":"ttfb-reverse-proxy-czy-proxy-spowalnia-strone","status":"publish","type":"post","link":"https:\/\/jalvo.eu\/pl\/ttfb-reverse-proxy-czy-proxy-spowalnia-strone\/","title":{"rendered":"TTFB a reverse proxy: czy proxy spowalnia Twoj\u0105 stron\u0119?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Tak, reverse proxy dok\u0142ada jeden dodatkowy przeskok w sieci, wi\u0119c mo\u017ce wyd\u0142u\u017cy\u0107 czas do pierwszego bajtu. O ile? Przy rozs\u0105dnej konfiguracji zwykle o bardzo niewiele. A jedyny uczciwy spos\u00f3b, \u017ceby to sprawdzi\u0107, to pomiar przed zmian\u0105 i po niej. Je\u015bli boisz si\u0119, \u017ce postawienie NGINX przed hostingiem zaszkodzi szybko\u015bci strony i pozycjom w Google, ten poradnik poka\u017ce, z czego naprawd\u0119 sk\u0142ada si\u0119 TTFB przy reverse proxy, sk\u0105d bierze si\u0119 op\u00f3\u017anienie proxy, jak je zmierzy\u0107 i jak utrzyma\u0107 je na niskim poziomie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co w\u0142a\u015bciwie mierzy czas do pierwszego bajtu?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Czas do pierwszego bajtu to czas od rozpocz\u0119cia nawigacji do chwili, gdy dotrze pierwszy bajt odpowiedzi. Tak opisuje go <a href=\"https:\/\/web.dev\/articles\/ttfb\" rel=\"nofollow noopener\" target=\"_blank\">poradnik web.dev o TTFB<\/a>. Obejmuje to zestawienie po\u0142\u0105czenia (zapytanie DNS, po\u0142\u0105czenie TCP, handshake TLS) oraz ca\u0142y czas, jaki backend po\u015bwi\u0119ca na zbudowanie strony. Liczy si\u0119 praca sieci. Liczy si\u0119 praca serwera. Jedno i drugie. Jest te\u017c niuans, kt\u00f3ry wielu pomija: odpowiedzi Early Hints i wczesne wys\u0142anie nag\u0142\u00f3wk\u00f3w albo sekcji <em>&lt;head&gt;<\/em> tak\u017ce licz\u0105 si\u0119 jako pierwszy bajt, a osobny znacznik czasu, <em>finalResponseHeadersStart<\/em>, pokazuje, kiedy faktycznie zaczyna si\u0119 w\u0142a\u015bciwa odpowied\u017a z dokumentem. Poniewa\u017c TTFB poprzedza First Contentful Paint i Largest Contentful Paint, wolny pierwszy bajt op\u00f3\u017ania ka\u017cde kolejne renderowanie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jaki TTFB jest dobry i dlaczego ma znaczenie dla SEO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Zgodnie z <a href=\"https:\/\/web.dev\/articles\/ttfb\" rel=\"nofollow noopener\" target=\"_blank\">progami TTFB wed\u0142ug web.dev<\/a> dobry wynik to 0,8 sekundy lub mniej, a s\u0142aby to wszystko powy\u017cej 1,8 sekundy. Sam TTFB nie jest metryk\u0105 Core Web Vitals. Ale bezpo\u015brednio wp\u0142ywa na LCP, kt\u00f3re ni\u0105 jest.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Google w swojej <a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/core-web-vitals\" rel=\"nofollow noopener\" target=\"_blank\">dokumentacji Core Web Vitals dla wyszukiwarki<\/a> zaleca w\u0142a\u015bcicielom stron dobre wyniki Core Web Vitals, je\u015bli chc\u0105 odnosi\u0107 sukces w wyszukiwarce. Czas odpowiedzi serwera wp\u0142ywa wi\u0119c na SEO po\u015brednio. Wolny backend albo \u017ale umieszczone proxy pogarszaj\u0105 metryki \u0142adowania odczuwane przez u\u017cytkownika, na kt\u00f3re Google rzeczywi\u015bcie patrzy (i to o nie warto dba\u0107, a nie o TTFB jako jak\u0105\u015b magiczn\u0105 liczb\u0119 rankingow\u0105).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gdzie reverse proxy dodaje op\u00f3\u017anienie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Proxy dodaje op\u00f3\u017anienie w dw\u00f3ch miejscach: przez dodatkowy przeskok mi\u0119dzy odwiedzaj\u0105cym, proxy i serwerem \u017ar\u00f3d\u0142owym oraz przez nowe po\u0142\u0105czenie, kt\u00f3re mo\u017ce otwiera\u0107 do serwera \u017ar\u00f3d\u0142owego przy ka\u017cdym \u017c\u0105daniu. Najwa\u017cniejsza jest odleg\u0142o\u015b\u0107. Postaw proxy daleko od serwera \u017ar\u00f3d\u0142owego albo daleko od czytelnik\u00f3w, a zap\u0142acisz za to dodatkowymi przej\u015bciami w obie strony. Dlatego <a href=\"https:\/\/jalvo.eu\/choosing-hosting-location-readers-servers-disagree\/\">wyb\u00f3r lokalizacji hostingu<\/a> wymaga tyle samo namys\u0142u co samo proxy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drugi koszt to zestawianie po\u0142\u0105czenia z upstreamem. Przy wy\u0142\u0105czonym keepalive proxy przy ka\u017cdym \u017c\u0105daniu powtarza handshake TCP i TLS z serwerem \u017ar\u00f3d\u0142owym. Czyste marnotrawstwo. Ale jest i druga strona: ten sam uk\u0142ad mo\u017ce Ci wr\u0119cz pom\u00f3c. Je\u015bli TLS ko\u0144czy si\u0119 blisko czytelnik\u00f3w, a proxy trzyma gotowe po\u0142\u0105czenia z serwerem \u017ar\u00f3d\u0142owym, mo\u017cesz zr\u00f3wnowa\u017cy\u0107 koszt dodatkowego przeskoku. Jalvo to na przyk\u0142ad reverse proxy na NGINX z <a href=\"https:\/\/jalvo.eu\/services\/\">europejskimi i ameryka\u0144skimi adresami IP<\/a>, wi\u0119c wynik zale\u017cy od tego, gdzie proxy stoi wzgl\u0119dem Twojego serwera \u017ar\u00f3d\u0142owego i Twoich odbiorc\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak zmierzy\u0107 TTFB reverse proxy przed zmian\u0105 i po niej<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Por\u00f3wnaj ten sam adres URL przez proxy i bezpo\u015brednio na serwerze \u017ar\u00f3d\u0142owym, z tej samej lokalizacji, wielokrotnie. Jedno \u017c\u0105danie nie m\u00f3wi prawie nic. Szum w sieci mocno rozrzuca pojedyncze wyniki.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Uruchom curl z polami czasowymi dla nazwy hosta proxy: <code>curl -o \/dev\/null -s -w \"connect:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer}n\" https:\/\/example.com\/<\/code><\/li>\n<li>Uruchom to samo polecenie dla serwera \u017ar\u00f3d\u0142owego, z <code>--resolve example.com:443:ORIGIN_IP<\/code> albo wpisem w pliku hosts, \u017ceby certyfikat nadal pasowa\u0142.<\/li>\n<li>Powt\u00f3rz ka\u017cdy pomiar wiele razy i por\u00f3wnuj mediany, a nie pojedyncze warto\u015bci.<\/li>\n<li>Testuj z region\u00f3w, w kt\u00f3rych faktycznie s\u0105 Twoi czytelnicy, a nie tylko ze swojego laptopa.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Dane z rzeczywistego ruchu da Ci Navigation Timing API albo biblioteka web-vitals, kt\u00f3re raportuj\u0105 TTFB dla prawdziwych odwiedzaj\u0105cych. Resource Timing API obs\u0142uguje pozosta\u0142e \u017c\u0105dania, r\u00f3wnie\u017c te do innych domen. Uwaga jednak: zasoby z tej samej domeny mog\u0105 pokazywa\u0107 zero, bo po\u0142\u0105czenie jest ju\u017c otwarte albo plik pochodzi z cache. Czytaj\u0105c wyniki, patrz na r\u00f3\u017cnice. Wi\u0119ksza r\u00f3\u017cnica w czasie po\u0142\u0105czenia i TLS wskazuje na koszt sieci. R\u00f3\u017cnica tylko w czasie do pierwszego bajtu? To backend.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Keepalive do upstreamu i inne ustawienia na w\u0142asnym NGINX<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najwi\u0119kszy zysk po stronie proxy daje ponowne u\u017cywanie po\u0142\u0105cze\u0144 z serwerem \u017ar\u00f3d\u0142owym zamiast otwierania nowego przy ka\u017cdym \u017c\u0105daniu. Na w\u0142asnym NGINX sprowadza si\u0119 to do trzech ustawie\u0144:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>blok <code>upstream<\/code> z dyrektyw\u0105 <code>keepalive<\/code>, kt\u00f3ra utrzymuje otwarte bezczynne po\u0142\u0105czenia,<\/li>\n<li><code>proxy_http_version 1.1;<\/code> w bloku location, kt\u00f3ry przekazuje ruch,<\/li>\n<li><code>proxy_set_header Connection \"\";<\/code>, \u017ceby wyczy\u015bci\u0107 nag\u0142\u00f3wek, kt\u00f3ry inaczej zamyka\u0142by ka\u017cde po\u0142\u0105czenie.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Trzymaj proxy i serwer \u017ar\u00f3d\u0142owy blisko siebie w sieci i nie \u0142\u0105cz kilku proxy w \u0142a\u0144cuch, bo ka\u017cda warstwa dok\u0142ada w\u0142asny przeskok. Dla jasno\u015bci: to ustawienia Twojego serwera \u017ar\u00f3d\u0142owego albo Twojego w\u0142asnego NGINX, a nie opcje w panelu Jalvo. A je\u015bli w pomiarach dominuje czas przetwarzania po stronie backendu, najpierw napraw serwer \u017ar\u00f3d\u0142owy. \u017badne strojenie proxy nie ukryje wolnej aplikacji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kiedy to nie proxy odpowiada za wolny TTFB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli serwer \u017ar\u00f3d\u0142owy jest wolny ju\u017c przy bezpo\u015brednim po\u0142\u0105czeniu, usuni\u0119cie proxy nie poprawi TTFB. Typowi winowajcy po stronie serwera \u017ar\u00f3d\u0142owego: ci\u0119\u017ckie zapytania do bazy danych, brak cache stron w CMS, przeci\u0105\u017cony hosting wsp\u00f3\u0142dzielony.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oznaki, \u017ce winny jest backend, a nie sie\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bezpo\u015brednie \u017c\u0105dania do serwera \u017ar\u00f3d\u0142owego pokazuj\u0105 podobnie wolny pierwszy bajt,<\/li>\n<li>czasy po\u0142\u0105czenia i TLS s\u0105 niskie, a czas do pierwszego bajtu pozostaje wysoki,<\/li>\n<li>pliki statyczne wracaj\u0105 szybko, ale strony dynamiczne si\u0119 oci\u0105gaj\u0105,<\/li>\n<li>w godzinach szczytu wszystko zwalnia.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nie masz pewno\u015bci, czy proxy w og\u00f3le pasuje do Twojej konfiguracji? Zanim cokolwiek zmienisz, zastan\u00f3w si\u0119, kiedy <a href=\"https:\/\/jalvo.eu\/reverse-proxy-right-answer-or-hidden-problem\/\">proxy jest w\u0142a\u015bciwym narz\u0119dziem<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co zrobi\u0107 z wynikami TTFB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tak, reverse proxy dodaje przeskok. Ale w praktyce zmierzone op\u00f3\u017anienie zale\u017cy g\u0142\u00f3wnie od odleg\u0142o\u015bci i ponownego u\u017cywania po\u0142\u0105cze\u0144 z upstreamem, a oba te czynniki da si\u0119 poprawi\u0107. Zmierz serwer \u017ar\u00f3d\u0142owy i proxy, por\u00f3wnaj mediany, sprawd\u017a dane z rzeczywistego ruchu wzgl\u0119dem progu web.dev. Wi\u0119cej o lokalizacji i konfiguracji serwer\u00f3w znajdziesz we <a href=\"https:\/\/jalvo.eu\/blog\/\">wpisach o hostingu na blogu<\/a>. Moja rada? Zr\u00f3b dzi\u015b jedno por\u00f3wnanie w curl. Jasny punkt odniesienia to najszybszy spos\u00f3b, \u017ceby sprawdzi\u0107, czy TTFB reverse proxy to naprawd\u0119 Tw\u00f3j problem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1790291413603-0\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Czy reverse proxy zawsze zwi\u0119ksza TTFB?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>u003cpu003eNie zawsze. Owszem, dodaje przeskok w sieci, ale ponownie u\u017cywane po\u0142\u0105czenia z upstreamem i TLS ko\u0144czony bli\u017cej czytelnik\u00f3w mog\u0105 zr\u00f3wnowa\u017cy\u0107 ten koszt. Tylko pomiar przed zmian\u0105 i po niej poka\u017ce, jak to naprawd\u0119 dzia\u0142a na Twojej stronie.u003c\/pu003e<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790291413603-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Jak sprawdzi\u0107 TTFB z proxy i bez niego?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>u003cpu003eU\u017cyj p\u00f3l czasowych curl dla nazwy hosta proxy, a potem dla serwera \u017ar\u00f3d\u0142owego z opcj\u0105 u003ccodeu003eu002du002dresolveu003c\/codeu003e, \u017ceby obowi\u0105zywa\u0142 ten sam certyfikat. Powt\u00f3rz ka\u017cdy test kilka razy z tej samej lokalizacji. Potem por\u00f3wnaj mediany, a nie pojedyncze wyniki.u003c\/pu003e<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790291413603-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Czy TTFB jest czynnikiem rankingowym Google?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>u003cpu003eSam nie jest metryk\u0105 Core Web Vitals, ale poprzedza LCP, kt\u00f3re ni\u0105 jest. Google zaleca dobre wyniki Core Web Vitals, je\u015bli chcesz odnosi\u0107 sukces w wyszukiwarce, wi\u0119c wolny pierwszy bajt mo\u017ce zaszkodzi\u0107 po\u015brednio.u003c\/pu003e<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Tak, reverse proxy dok\u0142ada jeden dodatkowy przeskok w sieci, wi\u0119c mo\u017ce wyd\u0142u\u017cy\u0107 czas do pierwszego bajtu. O ile? Przy rozs\u0105dnej [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":2147,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[182],"tags":[],"class_list":["post-2171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo-pl"],"acf":[],"_links":{"self":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts\/2171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/comments?post=2171"}],"version-history":[{"count":1,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts\/2171\/revisions"}],"predecessor-version":[{"id":2181,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts\/2171\/revisions\/2181"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/media\/2147"}],"wp:attachment":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/media?parent=2171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/categories?post=2171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/tags?post=2171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}