NFsec Logo

Apache – kompresja brotli z awaryjnym powrotem do deflate

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

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , , , , , ,

Komentowanie tego wpisu jest zablokowane.