Jak włączyć kompresję Brotli w Nginx

Jak włączyć kompresję Brotli w Nginx

Kompresja Brotli jest ogólną techniką kompresji przez. Jest porównywalny z obecnie dostępnymi metodami kompresji, ponieważ oferuje 20-26% lepsze wskaźniki kompresji. Niemniej jednak nie jest to dobre, chyba że WebServer wysyła skompresowane zasoby tekstowe z algorytmem Brotli.

W tym artykule dowiemy się, jak działa kompresja na serwerze i dlaczego jest to przydatne? Nauczymy się również instalowanie serwera Nginx i zachęcić nasz serwer do dostarczania plików skompresowanych Brotli.

Tło

Techniki kompresji/algorytmy poprawiają wydajność witryny, zmniejszając rozmiar treści. Stąd skompresowane dane wymagają niskiego obciążenia i przesyłania czasu. Ma jednak cenę. Serwery wykorzystują wiele zasobów obliczeniowych, aby zapewnić lepszy wskaźnik kompresji. Stąd, tym lepiej, im drogi. Dlatego dodaje się wiele wysiłku w celu poprawy formatów kompresji przy jednoczesnym wykorzystaniu minimalnych cykli procesora.

Do tej pory najbardziej potencjalny format kompresji został gzped. Ostatnio GZIP zostaje zastąpiony nowym algorytmem kompresji znanym jako Brotli. Jest to zaawansowany algorytm kompresji złożony z kodowania Huffmana, algorytmu L77 i modelowania kontekstowego. Natomiast GZIP jest zbudowany na algorytmie deflate.

Format kompresji bezstratów, zaprojektowany przez Google, jest ściśle powiązany z formatem sprężania sprężania. Obie metody kompresji używają przesuwanych okien do odwołania. Przesuwane rozmiar okna Brotli waha się od 1 kb do 16 MB. Natomiast GZIP ma stały rozmiar okna 32 kb. Oznacza to, że okno Brotli jest 512 razy większe niż okno deflate, co nie jest istotne, ponieważ pliki tekstowe większe niż 32 kb są rzadko na serwerach internetowych.

Kompatybilność kompresji serwera jest ważna

Za każdym razem, gdy pobieramy plik z przeglądarki, przeglądarka żąda serwera, jaki rodzaj kompresji obsługuje za pośrednictwem nagłówka. Na przykład, jeśli przeglądarka obsługuje gzip I siadać do dekompresji. Doda te opcje w swoim Akceptacja, Nagłówek, ja.mi.,

Accept-Encoding = ”deflate, gzip”

Stąd przeglądarki, które nie obsługują tych formatów, nie uwzględnią ich w nagłówku. Kiedy serwer odpowiada treścią, mówi przeglądarce o formacie kompresji za pośrednictwem nagłówka, Kodowanie treści. Stąd, jeśli obsługuje GZIP, nagłówek wygląda tak:

Content-encoding = ”gzip”

Nagłówki przeglądarek, takie jak Firefox, które obsługują kompresję Brotli i serwer internetowy, który ma zainstalowany moduł Brotli, aby wyglądał tak:

Accept-Encoding = ”deflate, gzip, br”
Content-encoding = ”gzip, br”

Stąd, jeśli przeglądarka wykorzystuje najlepszy format kompresji, a serwer WWW nie, nie jest to dobre, ponieważ serwer WWW nie odsyła plików z preferowanym algorytmem kompresji. Dlatego ważne jest, aby zainstalować moduł kompresyjny dla serwera internetowego.

Instalacja serwera

Przed przejściem do konfiguracji Brotli skonfigurujemy nasz serwer Nginx. Przed tym sudo aktualizacja apt-get Twój dystrybucja Ubuntu i wpisz następujące polecenia w terminalu Bash.

Ubuntu@ubuntu: ~ $ sudo apt-get aktualizacja
Ubuntu@ubuntu: ~ $ sudo apt -get instaluj nginx -y
Ubuntu@ubuntu: ~ $ sudo service nginx start

Aby umożliwić kompresję Brotli w nginx, skompilujemy nasze .więc moduły zgodnie z naszymi szczegółami wersji Nginx. Jak pokazano, wpisanie następującego polecenia wyświetli wersję Nginx:

Ubuntu@ubuntu: ~ $ nginx -v
Wersja Nginx: Nginx/1.18.0 (Ubuntu)

Użyj wget Poleć wraz ze szczegółem wersji Nginx, aby pobrać kod źródłowy ze strony internetowej Nginx.

ubuntu@ubuntu: ~ $ wget https: // nginx.org/pobierz/nginx-1.18.0.smoła.GZ
--2021-02-07 02: 57: 33-- https: // nginx.org/pobierz/nginx-1.18.0.smoła.GZ
Rozwiązanie Nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2A05: D014: EDB: 5702 :: 6,…
Łączenie z Nginx.org (nginx.org) | 3.125.197.172 |: 443… Połączone.
Wysłane żądanie HTTP, czekając na odpowiedź… 200 OK
Długość: 1039530 (1015K) [Aplikacja/strumień ośmiorg]]
Oszczędzanie na: 'nginx-1.18.0.smoła.GZ '
Nginx-1.18.0.smoła.GZ 100%[======================================================================== ===================>] 1015K 220KB/s w 4.8s
2021-02-07 02:57:38 (212 kb/s)-„nginx-1.18.0.smoła.GZ „uratował [1039530/1039530]

Użyjemy tego kodu źródłowego do kompilacji *.więc binaria do kompresji Brotli. Teraz wyodrębnij plik za pomocą następującego polecenia.

Ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.smoła.GZ

Konfiguracja modułu Brotli

Teraz Google wydało moduł Brotli dla Nginx. Zajmujemy moduł z repozytorium Google.

Ubuntu@ubuntu: ~ $ git klon https: // github.com/google/ngx_brotli -rekusyjny.

Będziemy płyta CD do Nginx-1.18.0 folder do konfigurowania dynamicznego modułu Brotli.

Ubuntu@ubuntu: ~ $ cd nginx-1.18.0/
Ubuntu@ubuntu: ~ $ sudo ./Configure--With-Compat --add-Dynamic-Module =… /ngx_brotli

Uwaga: możesz odbierać następujący błąd podczas konfiguracji

./konfiguruj: błąd: moduł przepisywania HTTP wymaga biblioteki PCRE.
Możesz wyłączyć moduł za pomocą--without-http_rewrite_module
opcja lub zainstaluj bibliotekę PCRE w systemie lub zbuduj bibliotekę PCRE
Statycznie ze źródła z nginx za pomocą opcji--with-pcre =.

W takim przypadku uruchom następujące polecenie, aby zainstalować bibliotekę PCRE

Ubuntu@ubuntu: ~ $ sudo apt-get instaluj libpcre3-dev -y

Kompilacja modułu

Użyjemy robić polecenie utworzenia moduły folder wewnątrz nginx-1.18.0 Directory.

Ubuntu@ubuntu: ~ $ sudo tworzy moduły

Używamy CP polecenie kopiowania ngx_http_brotli*.Więc pliki z Nginx-1.18.0/OBJS folder do folderu modułów.

Ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/
Ubuntu@ubuntu: ~ $ sudo cp ngx_http_brotli*.Więc /usr/share/nginx/moduły

Teraz wymień zawartość plików za pomocą LS Komenda. Zauważysz, że składa się z dwóch różnych plików modułów, i.mi.:

Ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.Więc
ngx_http_brotli_filter_module.Więc
ngx_http_brotli_static_module.Więc
  • Zwykły moduł Brotli: NGX_HTTP_BROTLI_FILTER_MODULE.Więc moduł kompresuje wszystkie pliki w locie, a zatem wymaga więcej zasobów obliczeniowych
  • Moduł statyczny Brotli: Ngx_http_brotli_static_module.Tak więc moduł pozwala mu obsługiwać pliki statyczne wstępnie skompresowane, stąd mniej wymagający zasobów.

Teraz użyj swojego ulubionego edytora, aby otworzyć/etc/nginx/nginx.plik CONF, aby dodać moduły obciążenia Brotli, aby rozpocząć konfigurację Brotli, włączając następujące wiersze:

Ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.conf
# Sekcja modułu załadunku
load_module "moduły/ngx_http_brotli_filter_module.Więc";
load_module "moduły/ngx_http_brotli_static_module.Więc";

Uwzględnimy również ścieżki folderów konfiguracyjnych /etc/nginx/conf.D/*.conf

I /usr/share/nginx/modules/*.conf W powyższym pliku, takim jak:

http
# Dołącz foldery konfiguracyjne
obejmują/etc/nginx/conf.D/*.conf;
obejmują/usr/share/nginx/moduły/*.conf;

Aby dodać konfigurację Brotli, otwórz/etc/nginx/conf.D/Brotli.conf

plik w krzepa Edytor i włącz Brotli, ustawiając następujące dyrektywy konfiguracyjne:

Brotli on;
brotli_static on;
Brotli_Comp_Level 6;
Brotli_types Application/RSS+XML Application/Xhtml+XML
tekst/CSS tekst/zwykły;

„„Brotli Off | On„Wartość włącza lub wyłącza dynamikę lub w locie kompresja treści.

''Brotli_ statyczny umożliwia serwerze Nginx sprawdzenie, czy pliki wstępnie skompresowane z .rozszerzenia BR istnieją lub nie. Możemy również przekształcić to ustawienie w opcję wyłączony Lub zawsze. zawsze Wartość pozwala serwerowi wysłać zawartość wstępnie skompresowaną bez potwierdzania, czy przeglądarka ją obsługuje, czy nie. Ponieważ Brotli jest wymagający zasobów, ten moduł najlepiej nadaje się do zmniejszenia sytuacji wąskich gardła.

„„Brotli_Comp_Level 6”Dyrektywa ustawia dynamiczny poziom jakości kompresji na 6. Może wynosić od 0 do 11.

Wreszcie, włącz dynamiczną kompresję dla określonych typów MIME, podczas gdy odpowiedzi tekstowe/HTML są zawsze ściśnięte. Domyślna składnia dla tej dyrektywy to Brotli_types [typ mim]. Więcej informacji na temat dyrektywy konfiguracji na GitHub można.

Zapisz zmiany, uruchom ponownie usługę Nginx, wpisując „Usługa sudo restart nginx” I wszystko jest gotowe.

Wniosek

Po zmianach zauważysz oczywiste ulepszenia wskaźników wydajności. Jednak ma niewielką wadę zwiększonego obciążenia procesora w czasie szczytu. Aby uniknąć takich sytuacji, miej oko na wykorzystanie procesora; Jeśli osiągnie 100% regularnie, możemy wykorzystać wiele opcji zgodnie z naszymi preferencjami, takimi jak prezentowanie zawartości wstępnie skompresowanej lub statycznej, obniżenie poziomu kompresji i wyłączanie kompresji w locie, wśród wielu wielu.