Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Brotli — kompresja w Nginx i Apache: lepsza niż gzip

Opublikowano: 10 kwietnia 2026 · Kategoria: Hosting / Wydajność

Brotli (algorytm Google z 2015 r.) jest nowszą alternatywą dla gzip i oferuje 15-25% lepszą kompresję przy podobnym czasie dekompresji. Obsługiwany przez wszystkie nowoczesne przeglądarki, wymagany do uzyskania top wyników w PageSpeed Insights. Oto jak go włączyć na Nginx i Apache.

Brotli vs gzip — benchmarki

Typ pliku Oryginał gzip -9 Brotli -11 Zysk Brotli
HTML (100 KB) 100 KB 32 KB 26 KB -19%
CSS minified (50 KB) 50 KB 14 KB 11 KB -21%
JS bundle (200 KB) 200 KB 68 KB 58 KB -15%
JSON API response (20 KB) 20 KB 5.8 KB 4.6 KB -21%
JPEG (50 KB) 50 KB 49 KB 49 KB ~0%

Nginx — instalacja ngx_brotli

Nginx nie ma wbudowanego Brotli — musisz dodać moduł ngx_brotli. Najwygodniej zainstalować gotowy pakiet z repozytorium lub skompilować Nginx z modułem:

# Metoda 1: Gotowy pakiet (Ubuntu/Debian z nginx.org)
apt install libnginx-mod-brotli

# Metoda 2: Kompilacja (dla kontroli nad wersją)
apt install -y libgoogle-perftools-dev git build-essential libpcre3-dev zlib1g-dev libssl-dev

# Sklonuj ngx_brotli
cd /tmp
git clone --recurse-submodules https://github.com/google/ngx_brotli
cd ngx_brotli && git submodule update --init

# Sprawdź argumenty obecnej kompilacji Nginx
nginx -V 2>&1 | grep configure | sed 's/ --/\n --/g'

# Rekompilacja z modułem (dodaj --add-dynamic-module)
cd /tmp
wget https://nginx.org/download/nginx-$(nginx -v 2>&1 | cut -d/ -f2).tar.gz
tar xzf nginx-*.tar.gz
cd nginx-*/

# Tu skopiuj istniejące flagi z nginx -V i dodaj:
./configure [istniejące-flagi] --add-dynamic-module=/tmp/ngx_brotli
make modules
cp objs/ngx_http_brotli_filter_module.so /etc/nginx/modules/
cp objs/ngx_http_brotli_static_module.so /etc/nginx/modules/
# /etc/nginx/nginx.conf — załadowanie modułów (na górze pliku)
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

# Konfiguracja Brotli w bloku http {}
http {
    # Brotli — kompresja dynamiczna
    brotli on;
    brotli_comp_level 6;         # 1-11, 6 = dobry balans
    brotli_min_length 256;       # Nie kompresuj małych plików
    brotli_types
        text/plain
        text/css
        text/javascript
        text/xml
        text/x-component
        application/javascript
        application/json
        application/xml
        application/rss+xml
        application/atom+xml
        application/vnd.ms-fontobject
        image/svg+xml
        font/truetype
        font/opentype;

    # brotli_static on — serwuj pre-skompresowane pliki .br
    # (jeśli istnieje plik.css.br, serwuj zamiast plik.css)
    brotli_static on;

    # Zostaw gzip jako fallback
    gzip on;
    gzip_vary on;
    gzip_types text/plain text/css application/javascript application/json;
}
nginx -t && systemctl reload nginx

# Weryfikacja
curl -H "Accept-Encoding: br" -sI https://example.com | grep -i content-encoding
# Oczekiwane: content-encoding: br

Pre-kompresja plików statycznych (poziom 11)

Dla plików statycznych (CSS, JS, HTML deploy) wygeneruj pliki .br offline z poziomem 11 — serwer je serwuje bez CPU overhead:

# Instalacja narzędzia brotli CLI
apt install brotli

# Pre-kompresja jednego pliku
brotli --quality=11 --output=main.css.br main.css

# Pre-kompresja wszystkich CSS i JS w katalogu
find /var/www/html -type f \( -name "*.css" -o -name "*.js" -o -name "*.html" \) -exec brotli --quality=11 {} \;

# Skrypt do użycia po każdym deploymencie
#!/bin/bash
WEBROOT="/var/www/html"
find "$WEBROOT" -type f \( -name "*.css" -o -name "*.js" -o -name "*.svg" -o -name "*.html" -o -name "*.json" \) | while read f; do
    brotli --quality=11 --output="${f}.br" "$f"
done
echo "Pre-kompresja Brotli zakończona"

Apache — mod_brotli

# Instalacja i włączenie mod_brotli (Ubuntu 20.04+)
apt install libbrotli1
a2enmod brotli
systemctl restart apache2
# /etc/apache2/conf-available/brotli.conf
<IfModule mod_brotli.c>
    AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript
    AddOutputFilterByType BROTLI_COMPRESS application/javascript application/json application/xml
    AddOutputFilterByType BROTLI_COMPRESS application/rss+xml application/atom+xml
    AddOutputFilterByType BROTLI_COMPRESS image/svg+xml font/opentype font/truetype

    # Nie kompresuj już skompresowanych plików
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|webp|avif|mp4|mp3|woff2?)$ no-brotli

    BrotliCompressionQuality 6
    BrotliFilterNote Input brotli_input_size
    BrotliFilterNote Output brotli_output_size
    BrotliFilterNote Ratio brotli_compression_ratio
</IfModule>
a2enconf brotli
apache2ctl configtest && systemctl reload apache2

# Weryfikacja
curl -H "Accept-Encoding: br" -sI http://localhost/ | grep content-encoding

CDN z obsługą Brotli

Jeśli używasz CDN, Brotli może działać bez żadnej konfiguracji serwera origin:

  • Cloudflare — Brotli włączone domyślnie (plan Free+). Speed → Optimization → Brotli: on. Cloudflare kompresuje pliki między Edge a użytkownikiem, niezależnie od serwera origin.
  • BunnyCDN — Brotli obsługiwany automatycznie przy włączonym Smart Optimization.
  • Fastly — wymaga włączenia w konfiguracji serwisu VCL.
  • AWS CloudFront — obsługuje Brotli od 2020 r. — włącz "Compress objects automatically" w distribution settings.

Najczęstsze pytania

Ile Brotli oszczędza w porównaniu z gzip? +
Przy poziomie kompresji 11 (maksymalnym) Brotli osiąga 15-25% mniejszy rozmiar niż gzip przy poziomie 9. W praktyce (poziomy 4-6, balans szybkości/rozmiaru) różnica wynosi 10-20%. Największy zysk jest dla plików tekstowych: HTML -20%, CSS -18%, JS -15%. Dla plików binarnych (obrazy, wideo) Brotli nie daje przewagi — te pliki powinny być już skompresowane (WebP, AVIF, H.264).
Czy Brotli jest obsługiwany przez wszystkie przeglądarki? +
Tak — Brotli (br) obsługują wszystkie nowoczesne przeglądarki: Chrome 49+, Firefox 44+, Safari 13+, Edge 15+. Przeglądarka informuje serwer o wsparciu przez nagłówek Accept-Encoding: gzip, deflate, br. Serwer odpowiada Content-Encoding: br jeśli ma Brotli, inaczej odpada do gzip. Brak wsparcia = automatyczny fallback, bez błędów.
Czy mogę włączyć Brotli na hostingu współdzielonym? +
Na hostingu współdzielonym nie masz dostępu do konfiguracji serwera, więc nie możesz instalować modułów Brotli. Możesz natomiast: (1) Wygenerować pliki .br statycznie (np. brotli --best plik.css → plik.css.br) i serwować je przez .htaccess, (2) Użyć CDN z obsługą Brotli (Cloudflare, BunnyCDN automatycznie konwertują), (3) Wybrać hosting z LiteSpeed, który ma wbudowane Brotli. VPS daje pełną kontrolę.
Który poziom kompresji Brotli wybrać? +
Dla dynamicznych odpowiedzi (PHP, API): poziom 4-6 — dobry balans szybkości kompresji i rozmiaru. Poziom 11 jest 100x wolniejszy od poziomu 1 i nadaje się tylko do pre-kompresji plików statycznych. Dla brotli_static (pre-skompresowane pliki .br na dysku): użyj offline poziomu 11, serwer serwuje plik bez kompresji w czasie żądania — zero CPU overhead.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.