Nginx modulo Brotli (text compression)

Da Webmobili Wiki.

Diverse madonne hanno forgiato questa guida.
La fonte principale è https://github.com/google/ngx_brotli
ma è scritto male, perciò lo scrivo molto meglio qua sotto.

I passi da seguire

[modifica]

Prerequisiti

[modifica]

Intanto bisogna capire quale versione di Nginx si ha installata.

sudo nginx -v

Qui useremo la 1.22.1

Installare cmake e git per compilare codice sorgente.

sudo apt install git cmake zlib1g-dev

Scaricamento dei sorgenti

[modifica]

Creare una cartella temporanea in cui lavorare per scaricare i sorgenti e compilare dipendenze e moduli.

mkdir temp
cd temp

Scaricare dal sito ufficiale di Nginx il codice sorgente corrispondente alla propria versione.

wget https://nginx.org/download/nginx-1.22.1.tar.gz
tar -xvf nginx-1.22.1.tar.gz
rm nginx-1.22.1.tar.gz

Compilazione del modulo ngx_brotli

[modifica]

Ora segue una parte nella quale bisogna avere fede.
Credo che compili il modulo ngx_brotli assicurandosi di scaricare prima le eventuali dipendenze.

git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli
cd ngx_brotli/deps/brotli
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..
cmake --build . --config Release --target brotlienc
cd ../../../..

poi

cd nginx-1.22.1
export CFLAGS="-m64 -march=native -mtune=native -Ofast -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections"
export LDFLAGS="-m64 -Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
./configure --add-module=/home/simonevincenzi/temp/ngx_brotli
make && sudo make install

Compilazione dinamica di Nginx

[modifica]

Se tutto è andato bene procedere, altrimenti non si può fare. Dal folder nginx-1.22.1

./configure --with-compat --add-dynamic-module=/home/simonevincenzi/temp/ngx_brotli
make modules

Questo crea i file ngx_http_brotli_filter_module.so e ngx_http_brotli_static_module.so nella cartella objs

Configurazione Nginx

[modifica]

I due file vanno copiati nella cartella /usr/lib/nginx/modules/ (se non esiste va creata).
Sempre dal folder nginx-1.22.1

sudo mkdir /usr/lib/nginx
sudo mkdir /usr/lib/nginx/modules
sudo cp objs/ngx_http_brotli_filter_module.so /usr/lib/nginx/modules
sudo cp objs/ngx_http_brotli_static_module.so /usr/lib/nginx/modules

A questo punto dobbiamo comunicare a Nginx la presenza del modulo.

sudo nano /etc/nginx/nginx.conf

E prima del blocco http aggiungere

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

Poi inserirsi dentro ad http e aggiungere le righe

# Enable Brotli compression
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types application/atom+xml application/javascript application/json application/vnd.api+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;

Verificare la correttezza con

sudo nginx -t

e riavviare nginx

sudo systemctl restart nginx.service

Testare il supporto di compressione

[modifica]

Runnare il seguente comando (non dalla stessa macchina) e verificare l'header content-encoding: br

curl -H 'Accept-Encoding: br' -I https://www.designbest.com/it