Brotli è un algoritmo di compressione lossless generico sviluppato da Google come alternativa a Gzip, Zopfli e Deflate che comprime i dati utilizzando una combinazione di una moderna variante dell'algoritmo LZ77, codifica Huffman e modellazione del contesto a 2 ordini, con un rapporto di compressione paragonabile ai migliori metodi di compressione per uso generico attualmente disponibili. È simile in velocità allo sgonfiaggio ma offre una compressione più densa.
Brotli è open source con licenza MIT.
Nginx non ha supporto ufficiale ma esiste un modulo di terze parti sviluppato da Google chiamato ngx_brotli che puoi utilizzare per aggiungere supporto a Nginx.
Questa guida ti mostrerà come aggiungere il supporto Brotli al server web Nginx sul sistema Debian 10.
NOTA: Questa guida utilizzerà "johndoe"
come utente di esempio e "example.com
" come esempio di dominio. Sostituiscili in base ai tuoi nomi.
Requisiti
- Server Debian 10 (buster)
- Nginx versione 1.11.5 o successiva
- Nome di dominio con
A
/AAAA
record impostati - Certificato TLS
Passaggi iniziali
Controlla la tua versione di Debian:
lsb_release -ds
# Debian GNU/Linux 10 (buster)
Imposta il fuso orario:
sudo dpkg-reconfigure tzdata
Aggiorna i pacchetti del tuo sistema operativo (software). Questo è un primo passo essenziale perché ti assicura di avere gli ultimi aggiornamenti e correzioni di sicurezza per i pacchetti software predefiniti del tuo sistema operativo:
sudo apt update && sudo apt upgrade -y
Installa alcuni pacchetti essenziali necessari per l'amministrazione di base del sistema operativo Debian:
sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https
Passaggio 1:installa Acme.sh e ottieni un certificato TLS da Let's Encrypt
Brotli richiede la configurazione e l'utilizzo di HTTPS. In questa parte, otterremo un certificato affidabile da Let's Encrypt.
Scarica e installa Acme.sh:
sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc
Controlla la versione:
acme.sh --version
# v2.8.2
Ottieni certificati RSA ed ECDSA per example.com:
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength ec-256
Dopo aver eseguito i comandi precedenti, i certificati e le chiavi si troveranno nelle seguenti posizioni:
- RSA:
/etc/letsencrypt/example.com
- ECC/ECDSA:
/etc/letsencrypt/example.com_ecc
Passaggio 2:installa Nginx dal repository Nginx ufficiale
Scarica e installa l'ultima linea principale Nginx dal repository Nginx ufficiale:
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt
Controlla la versione di Nginx:
sudo nginx -v
# nginx version: nginx/1.17.4
Abilita e avvia il servizio Nginx:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Fase 3:scarica e compila il codice sorgente di Brotli
Dopo aver installato Nginx, dobbiamo creare il modulo Brotli (ngx_brotli
) come modulo Nginx dinamico. A partire dalla versione 1.11.5 di Nginx è possibile compilare singoli moduli dinamici senza compilare il software Nginx completo. Nei prossimi passaggi, costruiremo il modulo Brotli come dinamico senza compilare Nginx completo.
Scarica l'ultima versione del codice sorgente Nginx della linea principale ed estrailo:
wget https://nginx.org/download/nginx-1.17.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz
NOTA: È molto importante che i numeri di versione del pacchetto Nginx e il codice sorgente di Nginx corrispondano. Se hai installato Nginx 1.17.4 dal repository Nginx ufficiale, devi scaricare la stessa versione del codice sorgente , 1.17.4 in questo caso.
Rimuovi nginx-1.17.4.tar.gz:
rm nginx-1.17.4.tar.gz
Clona ngx_brotli
da GitHub:
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
Vai alla directory del codice sorgente di Nginx:
cd ~/nginx-1.17.4
Scarica le librerie richieste:
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
Compila il ngx_brotli
come modulo dinamico e copialo nella directory standard per i moduli Nginx, /etc/nginx/modules:
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules
Elenca i file in /etc/nginx/modules
e vedrai ngx_http_brotli_filter_module.so
e ngx_http_brotli_static_module.so:
ls /etc/nginx/modules
Imposta le autorizzazioni su 644
per tutti i .so
file:
sudo chmod 644 /etc/nginx/modules/*.so
Fase 4 – Configura Nginx
Siamo pronti per configurare il supporto Brotli in Nginx.
Esegui sudo vim /etc/nginx/nginx.conf
e aggiungi le seguenti due direttive nella parte superiore del file per caricare nuovi moduli Brotli:
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Testare la configurazione:
sudo nginx -t
Crea una directory principale del documento per example.com
e crea index.html
con alcuni contenuti:
sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit
Crea un host virtuale per example.com:
sudo vim /etc/nginx/conf.d/example.com.conf
Popolalo con la seguente configurazione:
server {
listen 80;
server_name example.com; # Replace with your domain name
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com; # Replace with your domain name
root /var/www/example.com; # Replace with your document root
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;
brotli on;
brotli_static on;
brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;
}
Testare la configurazione:
sudo nginx -t
Ricarica Nginx:
sudo systemctl reload nginx.service
Visita il tuo sito nel tuo browser web e apri la scheda Rete degli strumenti per sviluppatori. Vedrai Content-Encoding: br
nelle intestazioni delle risposte. Questo è l'indicatore del funzionamento della compressione Brotli.
Questo è tutto. Hai abilitato la compressione Brotli sul tuo sistema Debian 10.
Link
- https://brotli.org/
- https://github.com/google/brotli
- https://github.com/google/ngx_brotli
- https://en.wikipedia.org/wiki/Brotli