Nginx modulo Brotli (text compression)
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