Gzip, a może Brotli? Kompresja stron w Nginx

Gzip, a może Brotli? Kompresja stron w Nginx

7 sierpnia 2021 2 przez gielo

Nikogo chyba nie trzeba przekonywać jak ważna jest kompresja stron internetowych. Kompresja pozwala w dość znaczny sposób zmniejszyć ilość wysyłanych danych do przeglądarki, przy minimalnym dodatkowym obciążeniu procesora w stosunku do otrzymanych korzyści.

Gzip obecnie jest najczęściej wykorzystywanym mechanizmem kompresji stron wysyłanych przez serwer do przeglądarki użytkownika. Brotli natomiast jest szybszy i bardziej wydajny, niektóre testy pokazują, że nawet o 15-20% w stosunku do Gzip. Minusem jego użycia może być natomiast brak jego obsługi poprzez stare przeglądarki internetowe oraz to, że działa tylko ze stronami https. Strony nieszyfrowane, nie są przez niego obsługiwane.

Co więc wybrać? Uważam, że wybór brotli będzie lepszym pomysłem, a ten znikomy procent purystów, który korzysta z archaicznych wersji przeglądarek można odżałować. Ważniejsze jak myślę jest to, aby nasze strony były szybkie, a nasz serwer VPS nie był nadmiernie obciążony dodatkową kompresją stron. Brotli w tym przypadku sprawdza się tu bardzo dobrze.

Żeby nasz serwer Nginx mógł korzystać z Brotli musimy najpierw zainstalować odpowiedni moduł. Robimy to poprzez wydanie w konsoli polecenia

$ sudo apt install nginx-plus-module-brotli

Moduł dostępny jest, jak masz wykupioną licencję nginx plus. W przeciwnym wypadku dodaj repozytoria od Ondrej Sury, aby móc korzystać z brotli.

Następnie włączyć zainstalowany moduł Nginx poprzez dopisanie na samej górze pliku konfiguracyjnego /etc/nginx/nginx.con

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Do pliku konfiguracyjnego Nginx lub pliku konfiguracyjnego twojej strony /etc/nginx/sites-available/twojastrona.vhost dodaj jeszcze

brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_min_length 1000;
brotli_buffers 16 8k;
brotli_types application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;

Następnie przeładuj serwer poprzez wydanie w konsoli polecenia

$ sudo systemctl reload nginx

Za co odpowiadają poszczególne wpisy?

brotli on włącza nam obsługę brotli

brotli_comp_level 6 ustawia poziom kompresji na 6

brotli_static on Włącza lub wyłącza sprawdzanie istnienia wstępnie skompresowanych plików z rozszerzeniem .br. Dzięki tej wartości, wstępnie skompresowany plik jest używany we wszystkich przypadkach, bez sprawdzania, czy klient go obsługuje.

brotli_min_length 1000 Ustawia kompresję dla plików nie mniejszych niż 1000 bajtów.

brotli_buffers 16 8k Pozwala na kompresję klientom podłączonym przez proxy. Parametry określają ilość buforów oraz ich wielkość. W tym przypadku jest to 16 buforów po 8k.

brotli_types Określa co ma być objęte kompresją.

Na koniec jeszcze sprawdź, czy kompresja na twojej stronie działa. Można to zrobić odwiedzając stronę https://tools.keycdn.com/curl wpisując adres swojej strony i zaznaczając wszystkie poniższe opcje. Po wciśnięciu Check. Powinieneś poniżej zobaczyć wpis tego typu

content-encoding: br

Jeżeli tak jest, to znaczy, że kompresja brotli działa.