Przewodniki krok po kroku

Jak włączyć kompresję Gzip w Nginx i zmniejszyć rozmiar strony nawet o 70%

  • 13 minut czytania
  • Zespół Hostragons
Jak włączyć kompresję Gzip w Nginx i zmniejszyć rozmiar strony nawet o 70%

Kompresja Gzip w Nginx to funkcja serwerowa, która pozwala znacząco zmniejszyć rozmiar przesyłanych do przeglądarki plików tekstowych, takich jak HTML, CSS, JavaScript, XML czy JSON. Dzięki niej rozmiar strony może spaść nawet o 50-70% w wielu przypadkach. Celem jest przesyłanie tych samych danych w mniejszych pakietach, co skraca czas ładowania i zapewnia użytkownikom szybsze i płynniejsze korzystanie z witryny. Wystarczy włączyć w konfiguracji Nginx linię gzip on; oraz odpowiednio ustawić obsługiwane typy MIME, minimalny rozmiar pliku do kompresji oraz poziom kompresji, aby w kilka minut zauważyć wymierne przyspieszenie działania strony.

Szybkość działania strony to dziś nie tylko kwestia techniczna: bezpośrednio wpływa na SEO, współczynnik konwersji, efektywność reklam i zadowolenie użytkowników. W standardach SEO na 2026 rok duże znaczenie ma jakość doświadczenia użytkownika, mierzone m.in. przez Core Web Vitals, wydajność mobilną oraz efektywność indeksowania przez roboty. Dlatego aktywacja kompresji Gzip na Nginx to jedna z pierwszych optymalizacji, którą warto wdrożyć, szczególnie na hostingach współdzielonych, VPS, serwerach chmurowych czy przy dużym ruchu na stronie. Wybór hostingu zoptymalizowanego pod wydajność, takiego jak Hostragons, dodatkowo wspiera ten efekt: Pakiety szybkiego hostingu WWW.

Co to jest kompresja Gzip w Nginx?

Kompresja Gzip to mechanizm po stronie serwera, który zmniejsza rozmiar odpowiedzi HTTP przed wysłaniem do klienta, używając algorytmu Gzip. Przeglądarka zgłasza w nagłówku żądania Accept-Encoding: gzip, a Nginx odpowiada skompresowanymi danymi w formacie gzip. Użytkownik nie zauważa różnicy, ponieważ przeglądarka automatycznie rozpakowuje pliki i wyświetla je normalnie. Treść pozostaje niezmieniona, zmniejsza się tylko wielkość przesyłanych danych.

Przykładowo plik CSS o rozmiarze 180 KB może po kompresji zmniejszyć się do 35-50 KB, a skrypt JavaScript ważący 500 KB może zostać zredukowany do 120-180 KB, w zależności od zawartości. W przypadku dokumentów HTML, gdzie występuje dużo powtarzających się tagów i białych znaków, kompresja sięga nawet około 70%. Ten efekt nie dotyczy obrazów, które korzystają z własnych metod kompresji, takich jak JPEG, PNG, WebP czy AVIF.

Czy realne jest zmniejszenie rozmiaru strony o 70%?

Tak, ale dotyczy to jedynie odpowiednich typów plików. Kompresja Gzip działa na tekstowe zasoby przesyłane ze strony, a nie na cały ciężar witryny. Załóżmy, że strona waży 3 MB, z czego 1 MB to HTML, CSS, JS i JSON, a 2 MB to obrazy i filmy. Kompresja wpłynie tylko na ten 1 MB. Przy 70% redukcji rozmiar strony spadnie do około 2,3 MB. Jeśli jednak strona jest bardziej „tekstowa”, oszczędności będą bardziej wyraźne.

Weźmy realny przykład: na stronie WordPress główna treść HTML to 220 KB, style CSS to 310 KB, JavaScript 760 KB, a zapytania JSON 120 KB. Razem daje to 1410 KB do kompresji. Po włączeniu Gzip rozmiar ten może spaść do 420-600 KB, co oznacza oszczędność przesyłu rzędu 800-990 KB. Na urządzeniach mobilnych przekłada się to na szybsze wyświetlanie strony (LCP) i lepszy czas odpowiedzi serwera (TTFB).

Wpływ kompresji Gzip na SEO i doświadczenie użytkownika

Google nie podaje, czy sam fakt włączenia gzip jest czynnikiem rankingowym, jednak metryki wydajności, na które gzip wpływa, mają kluczowe znaczenie. Mniejsze pliki ładują się szybciej, co skraca czas renderowania strony i zmniejsza czas oczekiwania użytkownika. To szczególnie ważne dla użytkowników mobilnych, osób z wolniejszym internetem czy odwiedzających z innych krajów.

  • Szybsze pierwsze załadowanie: mniejszy plik HTML pozwala przeglądarce szybciej zbudować szkielet strony.

  • Mniejsze zużycie transferu: przy dużym ruchu oznacza to niższe koszty przesyłu danych.

  • Lepsza efektywność indeksowania: boty Google szybciej pobierają i analizują zasoby.

  • Wsparcie Core Web Vitals: choć gzip sam nie rozwiązuje problemów LCP, to redukcja CSS i JS pomaga w poprawie wyników.

  • Niższy współczynnik odrzuceń: drobne poprawki szybkości mogą zwiększyć konwersje, zwłaszcza w e-commerce i serwisach firmowych.

Optymalizując szybkość strony, nie wystarczy tylko ustawić gzip na serwerze. Warto też zwrócić uwagę na jakość hostingu, konfigurację SSL, szybkość DNS oraz optymalizację motywu. Dla bezpiecznej i szybkiej konfiguracji przydatne mogą być także porady ze stron Rozwiązania certyfikatów SSL i Sprawdzanie domen i rejestracja.

Zalecane ustawienia kompresji Gzip w Nginx

Włączenie Gzip w Nginx zwykle polega na dodaniu kilku dyrektyw do głównego pliku konfiguracyjnego lub do bloku serwera konkretnej strony. Lokalizacja pliku różni się w zależności od systemu operacyjnego. Na Ubuntu i Debianie to często /etc/nginx/nginx.conf, a konfiguracje witryn są w /etc/nginx/sites-available/. W systemach CentOS, AlmaLinux czy Rocky Linux częściej spotyka się katalog /etc/nginx/conf.d/.

Podstawowa konfiguracja opiera się na włączeniu gzip, ograniczeniu kompresji do plików powyżej określonego rozmiaru, wyłączeniu kompresji dla starych przeglądarek i określeniu typów plików do kompresji. Przykładowe ustawienia produkcyjne to: gzip on; gzip_comp_level 5; gzip_min_length 1024; gzip_vary on; gzip_proxied any; gzip_types text/plain text/css application/javascript application/json application/xml text/xml image/svg+xml.

Parametr gzip_comp_level może mieć wartość od 1 do 9. Wyższy poziom zwiększa stopień kompresji, ale też zużycie CPU. Dla większości stron optymalny jest poziom 4, 5 lub 6 – to dobry kompromis między efektywnością a obciążeniem serwera. Poziom 9 nie zawsze jest najlepszy, bo dla niewielkich plików może niepotrzebnie obciążać procesor. W przypadku serwerów o dużym ruchu lub ograniczonych zasobach warto rozważyć wydajniejszy plan hostingowy, np. Pakiety serwerów VPS.

Krok po kroku – jak włączyć kompresję Gzip w Nginx

1. Sprawdź aktualny stan

Przed optymalizacją warto zmierzyć wydajność strony. W narzędziach developerskich Chrome (zakładka Network) odśwież stronę i porównaj kolumny Size i Transferred. Jeśli wartości są zbliżone, prawdopodobnie gzip jest wyłączony. Możesz też sprawdzić nagłówki odpowiedzi, szukając Content-Encoding: gzip. Do testów przydadzą się również WebPageTest, GTmetrix, PageSpeed Insights lub komenda curl.

Zrób pomiar dla różnych typów stron: strona główna, kategorie, produkty, wpisy blogowe. Sprawdzanie tylko strony głównej może nie pokazać pełnego obrazu, bo różne podstrony mogą mieć różne wymagania i zawartość. Zapisuj wyniki, by po włączeniu kompresji łatwo ocenić poprawę.

2. Wykonaj kopię zapasową pliku konfiguracyjnego

Zanim zmienisz konfigurację Nginx, zawsze zrób kopię zapasową oryginalnego pliku. Nawet drobny błąd może uniemożliwić uruchomienie serwera. Skopiuj plik i nadaj mu nazwę z datą. Jeśli korzystasz z hostingu zarządzanego, w panelu może być opcja włączenia Gzip bez ręcznej edycji plików. W razie wątpliwości poproś o pomoc support.

3. Dodaj dyrektywy Gzip

Najczęściej dyrektywy umieszcza się w bloku http, aby działały dla wszystkich witryn na serwerze. Można też dodać je do konkretnego bloku server, jeśli chcemy aktywować Gzip tylko dla jednej domeny. Przykładowa konfiguracja produkcyjna to: gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 5; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 1024; gzip_types text/plain text/css text/xml application/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml.

Te ustawienia obejmują najpopularniejsze typy plików tekstowych. Unikaj dodawania do gzip nieodpowiednich formatów, takich jak JPG, PNG, GIF, WebP, MP4, ZIP czy PDF, które są już skompresowane i nie przyniosą korzyści, a mogą zwiększyć zużycie CPU. Wyjątkiem jest SVG, które jest plikiem tekstowym i warto je kompresować.

4. Przetestuj konfigurację Nginx

Zamiast od razu restartować serwer, najpierw sprawdź poprawność konfiguracji poleceniem nginx -t. Jeśli test przejdzie pomyślnie, użyj systemctl reload nginx, aby bez przerywania pracy serwera załadować nowe ustawienia. Restart jest bardziej inwazyjny i przy dużym ruchu wymaga ostrożności.

5. Zweryfikuj działanie

Po wdrożeniu usuń cache przeglądarki lub otwórz stronę w trybie incognito. W zakładce Network sprawdź, czy w nagłówkach odpowiedzi pojawił się Content-Encoding: gzip. Sprawdź też, czy rozmiar przesyłanych plików spadł – np. plik HTML, który wcześniej ważył 240 KB, powinien teraz mieć 45-70 KB. Podobne zmiany powinny być widoczne w CSS i JS.

Porównanie ustawień Gzip – tabela

Porównanie ustawień Gzip – tabela

Ustawienie

Zalecana wartość

Funkcja

Uwagi

gzip

on

Włącza kompresję.

Bez tego reszta nie działa.

gzip_comp_level

4-6

Balansuje stopień kompresji i obciążenie CPU.

Poziom 9 nie zawsze jest korzystny.

gzip_min_length

1024

Nie kompresuje plików poniżej 1 KB.

Zbyt małe pliki mogą generować niepotrzebne narzuty.

gzip_vary

on

Wysyła nagłówek Vary dla buforowania wersji skompresowanej i nieskompresowanej.

Istotne przy CDN i proxy.

gzip_types

CSS, JS, JSON, XML, SVG

Określa typy plików podlegających kompresji.

Nie dodawaj formatów obrazów i wideo.

Jakie pliki kompresować przez Gzip?

Najlepsze efekty kompresji osiągają pliki z powtarzającymi się wzorcami tekstowymi. Są to m.in. strony HTML, arkusze stylów CSS, pliki JavaScript, odpowiedzi JSON z API, mapy witryn XML, kanały RSS oraz pliki SVG. W nowoczesnych aplikacjach webowych, gdzie JavaScript bywa bardzo obszerny, gzip potrafi zmniejszyć jego rozmiar nawet o połowę. W aplikacjach React, Vue czy Angular skompresowanie głównego pakietu często przynosi znaczące oszczędności.

Natomiast nie należy kompresować plików już skompresowanych, takich jak JPEG, PNG, WebP, AVIF, MP4, MP3, ZIP, RAR czy PDF. Ich ponowna kompresja nie przyniesie korzyści, a zwiększy zużycie procesora. Dla obrazów lepsze są metody takie jak konwersja do WebP lub AVIF, odpowiednie skalowanie, lazy loading i CDN. Szczegółową strategię przyspieszania strony znajdziesz w Przewodnik po przyspieszaniu strony internetowej.

Użycie Gzip w WordPress, Laravel i stronach statycznych

WordPress

W WordPressie Gzip można włączyć na poziomie serwera lub za pomocą wtyczek. Najlepiej, gdy kompresję obsługuje serwer Nginx, ponieważ pliki są wtedy kompresowane zanim dotrą do PHP. Wtyczki cache często rekomendują Gzip, ale faktyczna kontrola powinna być po stronie serwera. Połączenie Gzip z minifikacją CSS i JS, krytycznym CSS, optymalizacją obrazów oraz cache daje najlepsze rezultaty.

Laravel i API

Aplikacje Laravel często przesyłają odpowiedzi JSON, które można skutecznie kompresować. Gzip pomaga zmniejszyć transfer dużych danych z API, choć dla bardzo małych odpowiedzi kompresja może być pomijana zgodnie z ustawieniem gzip_min_length. Poza gzip warto zadbać też o paginację, ograniczanie zwracanych pól i cache HTTP.

Strony statyczne

Na stronach statycznych efekt kompresji jest zwykle natychmiastowy, bo HTML, CSS i JS są serwowane bezpośrednio z Nginx bez warstwy aplikacji. Czasem można też przygotować statyczne wersje skompresowanych plików .gz, ale w większości przypadków dynamiczne gzip wystarczy.

Różnice między Gzip a Brotli

Brotli to nowszy algorytm kompresji opracowany przez Google, który często daje lepsze wyniki w kompresji tekstu niż Gzip. Jednak wsparcie Brotli w Nginx nie zawsze jest domyślnie dostępne i może wymagać dodatkowych modułów lub niestandardowych pakietów. Gzip jest natomiast stabilny, szeroko wspierany przez przeglądarki i bardzo dobrze sprawdza się jako podstawowa metoda kompresji.

Różnice między Gzip a Brotli

Kryterium

Gzip

Brotli

Kompatybilność

Wysoka

Bardzo dobra w nowoczesnych przeglądarkach

Łatwość instalacji

Domyślnie w Nginx

Wymaga dodatkowego modułu

Stopień kompresji

Dobry

Zazwyczaj lepszy

Zużycie CPU

Zbalansowane

Może być wyższe, zależnie od poziomu

Zalecenie

Podstawowa optymalizacja

Opcja zaawansowana

W praktyce najlepsze efekty przynosi obsługa obu – jeśli przeglądarka wspiera Brotli, korzysta z niej, jeśli nie – z Gzip. Jednak samo poprawne włączenie Gzip w Nginx to już duży krok naprzód.

Na co zwrócić uwagę przy używaniu CDN, cache i proxy?

Jeśli korzystasz z CDN lub reverse proxy, warto przemyśleć, gdzie i jak włączyć kompresję. Niektóre CDN-y same stosują Gzip lub Brotli po swojej stronie. Wtedy włączenie gzip na serwerze źródłowym nie powoduje podwójnej kompresji, o ile system poprawnie obsługuje nagłówki Content-Encoding. Warto jednak to przetestować. Dyrektywa gzip_vary on pomaga w poprawnym buforowaniu wersji skompresowanych i nieskompresowanych.

Typowym błędem jest wysyłanie skompresowanych treści do klienta, który nie obsługuje kompresji. Choć nowoczesne przeglądarki rzadko mają z tym problem, boty, starsze klienty lub nietypowe integracje mogą sprawiać kłopoty. Dlatego poprawne ustawienie nagłówków Vary i testowanie konfiguracji jest ważne. W przypadku dużych serwisów korporacyjnych warto rozważyć kompleksowe podejście uwzględniające DNS, SSL, CDN i hosting: rozwiązania hostingu dla firm.

Bezpieczeństwo i stabilność kompresji Gzip

Kompresja Gzip jest generalnie bezpieczna, ale w przeszłości dyskutowano o ryzyku ataków typu side-channel, takich jak BREACH, które wykorzystują kompresję HTTPS do wycieku poufnych tokenów. W nowoczesnych aplikacjach ryzyko to jest minimalizowane przez odpowiednie zarządzanie tokenami CSRF, ustawienia SameSite dla ciasteczek, bezpieczne nagłówki i projektowanie odpowiedzi. Używanie Gzip dla publicznych zasobów statycznych jest bezpieczne.

Największym zagrożeniem jest błędna konfiguracja – np. brak odpowiednich typów MIME może powodować, że ważne pliki się nie kompresują, a zła lokalizacja dyrektyw może uniemożliwić uruchomienie Nginx. Dlatego po każdej zmianie warto wykonać test nginx -t, monitorować logi i stosować zmiany poza godzinami szczytu.

Jakie metryki monitorować po włączeniu Gzip?

Po aktywacji kompresji nie warto skupiać się wyłącznie na ocenie PageSpeed. Należy obserwować bardziej techniczne wskaźniki, takie jak rozmiar przesłanych danych (Transferred size), rozmiar oryginalnego pliku (Resource size), nagłówki Content-Encoding, oraz metryki Core Web Vitals, jak LCP i FCP. Gzip głównie redukuje transfer, ale nie skraca czasu generowania strony na serwerze – jeśli baza danych działa wolno lub PHP jest obciążone, problem pozostanie.

  • Transferred size: faktyczna wielkość danych przesłanych do przeglądarki w postaci skompresowanej.

  • Resource size: rozmiar pliku po rozpakowaniu w przeglądarce.

  • Content-Encoding: obecność nagłówka gzip świadczy o aktywnej kompresji.

  • LCP (Largest Contentful Paint): czas załadowania największego widocznego elementu; gzip może go poprawić, ale potrzebna jest też optymalizacja obrazów.

  • Total Blocking Time: czas blokowania przez JavaScript; ważny jest nie tylko transfer, ale i wykonanie kodu.

Najczęstsze błędy i jak je naprawić

Gzip jest włączony, ale pliki się nie kompresują

Sprawdź, czy w konfiguracji jest poprawnie ustawiona dyrektywa gzip_types. Domyślnie Nginx kompresuje tylko text/html. Jeśli nie dodasz CSS, JS czy JSON, nie zobaczysz efektu. Upewnij się też, że pliki nie są za małe – gzip_min_length określa minimalny rozmiar.

Zużycie CPU wzrosło

Zmniejsz poziom gzip_comp_level z np. 5 do 3 lub 4. Często niższy poziom daje podobne korzyści przy mniejszym obciążeniu serwera. Przy bardzo dużym ruchu warto rozważyć dodatkowe strategie, np. kompresję po stronie CDN lub statyczne pliki .gz.

Po użyciu CDN nagłówek Content-Encoding znika

Sprawdź ustawienia kompresji w panelu CDN. Niektóre usługi domyślnie nie włączają gzip lub stosują je tylko do wybranych rodzajów plików. Testuj osobno origin i CDN, by upewnić się, że wszystko działa poprawnie.

PageSpeed nie poprawił się tak, jak oczekiwano

To normalne. Gzip zmniejsza transfer, ale nie rozwiązuje wszystkich problemów z wydajnością. Renderowanie blokujące CSS, nieużywany JavaScript, duże obrazy, skrypty zewnętrzne czy słaby hosting nadal mogą spowalniać stronę. Gzip to podstawa, ale nie jedyne rozwiązanie.

Lista kontrolna wdrożenia kompresji Gzip

  • Zmierz transfer danych na głównych i różnych szablonach strony.

  • Zrób kopię zapasową pliku konfiguracyjnego Nginx.

  • Włącz gzip on, gzip_vary on i ustaw gzip_min_length na 1024.

  • Dodaj do gzip_types CSS, JS, JSON, XML, RSS i SVG.

  • Ustaw gzip_comp_level na 4-6, by wyważyć kompresję i CPU.

  • Nie kompresuj plików graficznych, wideo i archiwów.

  • Przetestuj konfigurację poleceniem nginx -t, a potem przeładuj serwer.

  • Sprawdź nagłówki Content-Encoding: gzip w Chrome DevTools lub curl.

  • Jeśli używasz CDN, zweryfikuj ustawienia i nagłówki Vary: Accept-Encoding.

  • Po wdrożeniu uwzględnij optymalizację obrazów, cache, baz danych i hosting.

Kiedy kompresja Gzip nie wystarczy?

Czasem mimo poprawnej kompresji strona może dalej działać wolno. Wynika to z kosztów przetwarzania lub renderowania. Na przykład, jeśli plik JavaScript ważący 1,5 MB zostanie skompresowany do 400 KB, przeglądarka wciąż musi ten kod przetworzyć i wykonać. Dlatego warto usuwać nieużywany JS, dzielić kod na moduły i opóźniać ładowanie skryptów niekrytycznych.

Podobnie, jeśli główny obraz waży 1 MB, gzip go nie zmniejszy. Lepiej przekonwertować go na WebP lub AVIF, odpowiednio dostosować rozmiar i stosować responsywne obrazy. Wolne zapytania do bazy danych, ograniczone zasoby CPU lub przeciążony hosting współdzielony także ograniczają efektywność gzip. W takich sytuacjach przydatne jest przeanalizowanie architektury hostingu: wybór hostingu skoncentrowanego na wydajności.

Podsumowanie: mała zmiana – duży wzrost wydajności

Kompresja Gzip w Nginx to jedna z najszybszych, najtańszych i najskuteczniejszych metod zmniejszenia rozmiaru strony i zużycia transferu. Poprawnie skonfigurowana potrafi zredukować pliki HTML, CSS, JavaScript, JSON i XML nawet o 50-70%. To przekłada się na szybsze ładowanie, lepsze doświadczenie użytkownika oraz pozytywny wpływ na SEO.

Najlepsze efekty osiągniesz, łącząc gzip z cache’owaniem, optymalizacją obrazów, dobrym hostingiem, aktualnym certyfikatem SSL oraz czystym kodem. Jeśli chcesz poprawić infrastrukturę swojej strony na Hostragons, porównaj dostępne pakiety hostingowe, domeny i SSL, wybierając rozwiązania dopasowane do potrzeb: Hostragons rozwiązania hostingowe.

Najczęściej zadawane pytania

Czy kompresja Gzip w Nginx rzeczywiście przyspiesza stronę?

Tak. Gzip zmniejsza wielkość przesyłanych plików tekstowych, co pozwala przeglądarce szybciej je pobierać. Szczególnie widoczne jest to na plikach HTML, CSS, JS i JSON. Efekt najlepiej oceniać razem z innymi optymalizacjami, takimi jak optymalizacja obrazów czy cache.

Jaki poziom kompresji Gzip wybrać?

Dla większości środowisk produkcyjnych najlepszy jest poziom gzip_comp_level 4, 5 lub 6. Wyższe poziomy mogą dać niewielkie oszczędności, ale kosztem większego obciążenia CPU. Przy dużym ruchu lepiej wybrać kompromis.

Czy Gzip kompresuje też obrazy?

Technicznie niektóre formaty można by kompresować, ale obrazy JPEG, PNG, WebP, AVIF i MP4 są już zoptymalizowane i nie warto ich dodatkowo gzipować. Lepsze efekty dają metody konwersji formatów, odpowiednie skalowanie i lazy loading.

Czy można używać Gzip i Brotli jednocześnie?

Tak. Jeśli przeglądarka wspiera Brotli, można go skonfigurować, a jeśli nie – używany jest Gzip. Brotli zwykle daje lepszą kompresję, ale wymaga dodatkowej konfiguracji w Nginx. Gzip jest prostszy i szerzej wspierany.

Jak sprawdzić, czy Gzip jest aktywny?

W narzędziach developerskich przeglądarki (np. Chrome DevTools) w zakładce Network wybierz plik i sprawdź nagłówki odpowiedzi – powinien tam być Content-Encoding: gzip. Można też użyć komendy curl lub narzędzi online typu WebPageTest. Jeśli rozmiar transferu jest znacznie mniejszy niż rozmiar pliku, oznacza to działającą kompresję.

Udostępnij ten artykuł:

Zespół Hostragons

Aktualne poradniki od naszego zespołu ekspertów dotyczące hostingu, serwerów i nazw domen. Razem znajdziemy idealne rozwiązanie dla Twojego projektu.

Skontaktuj się z Nami