Apache – kompresja brotli z awaryjnym powrotem do deflate
Napisał: Patryk Krawaczyński
16/05/2023 w Administracja Brak komentarzy. (artykuł nr 860, ilość słów: 396)
O
d wersji Apache 2.4.26 dostępny jest moduł umożliwiający kompresję statycznych elementów strony za pomocą algorytmu brotli. Jego szybkość jest podobna do gzip, ale zapewnia wyższą kompresję. Aktualnie algorytm ten jest już obsługiwany przez wszystkie główne przeglądarki, takie jak: Chrome, Firefox, Safari i Edge. W poniższej konfiguracji włączymy kompresję brotli dla reprezentatywnej grupy statycznych plików, ale zapewnimy również powrót do kompresji gzip, gdyby klient nie obsługiwał tej pierwszej.
Pierwszym krokiem jest instalacja pakietu brotli w systemie:
sudo apt install brotli -y
Drugim krokiem jest włączenie modułu mod_brotli.c, mod_filter.c oraz mod_deflate.c w Apache za pomocą polecenia:
sudo a2enmod brotli filter deflate
Posiadając włączone odpowiednie moduły możemy przejść do ich konfiguracji. W tym przykładzie zrobimy to na poziomie globalnym, ale nic nie stoi na przeszkodzie, aby konfigurację umieścić tylko w danym hoście wirtualnym:
<If "%{HTTP:Accept-Encoding} =~ /br/"> <IfModule mod_brotli.c> <IfModule mod_filter.c> AddOutputFilterByType BROTLI_COMPRESS text/text AddOutputFilterByType BROTLI_COMPRESS text/html AddOutputFilterByType BROTLI_COMPRESS text/plain AddOutputFilterByType BROTLI_COMPRESS text/xml AddOutputFilterByType BROTLI_COMPRESS text/css AddOutputFilterByType BROTLI_COMPRESS text/javascript AddOutputFilterByType BROTLI_COMPRESS application/x-javascript AddOutputFilterByType BROTLI_COMPRESS application/javascript AddOutputFilterByType BROTLI_COMPRESS application/x-httpd-php AddOutputFilterByType BROTLI_COMPRESS application/rss+xml AddOutputFilterByType BROTLI_COMPRESS application/wasm AddOutputFilterByType BROTLI_COMPRESS application/xml AddOutputFilterByType BROTLI_COMPRESS application/xhtml+xml AddOutputFilterByType BROTLI_COMPRESS application/json </IfModule> </IfModule> </If> <ElseIf "%{HTTP:Accept-Encoding} =~ /gzip/"> <IfModule mod_deflate.c> <IfModule mod_filter.c> AddOutputFilterByType DEFLATE text/text AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-httpd-php AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/wasm AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/json </IfModule> </IfModule> </ElseIf>
Powyższą zawartość umieszczamy w ścieżce: /etc/apache2/conf-available/static.conf i wydajemy polecenie:
a2enconf static
Ostatnim krokiem jest przetestowanie konfiguracji:
curl -v --http1.1 -H 'Accept-Encoding: br' https://nfsec.pl | brotli -d curl -v --http1.1 -H 'Accept-Encoding: gzip' https://nfsec.pl | gzip -d
Powyższe polecenia powinny zwrócić odpowiednio wartość nagłówka Content-Encoding
jako gzip oraz br.
Więcej informacji: Apache Module mod_brotli