Come abilitare la compressione di brotli in nginx

Come abilitare la compressione di brotli in nginx

La compressione di Brotli è una tecnica di compressione per scopi generici ampiamente supportata tra i browser. È paragonabile ai metodi di compressione attualmente disponibili in quanto offre rapporti di compressione migliori del 20-26%. Tuttavia, non va bene a meno che il server WebS non stia inviando risorse basate su testo compresso con l'algoritmo Brotli.

In questo articolo, impareremo come funziona la compressione nel server e perché è utile? Impareremo anche a installare il server Nginx e convincere il nostro server a fornire file compressi brotli.

Sfondo

Le tecniche/algoritmi di compressione migliorano le prestazioni del sito Web riducendo la dimensione del contenuto. Quindi i dati compressi richiedono un carico basso e un tempo di trasferimento. Tuttavia, ha un prezzo. I server utilizzano molte risorse computazionali per fornire un miglior tasso di compressione. Quindi, meglio è costoso. Quindi viene aggiunto un grande sforzo per migliorare i formati di compressione, utilizzando i cicli minimi della CPU.

Ormai, il formato di compressione più potenziale è stato gzippato. Recentemente GZIP è sostituito da un nuovo algoritmo di compressione noto come brotli. È un algoritmo di compressione avanzato composto da codifica Huffman, algoritmo L77 e modellazione di contesto. Al contrario, GZIP è costruito sull'algoritmo deflato.

Il formato di compressione senza perdita, progettato da Google, è strettamente correlato al formato di compressione deflata. Entrambi i metodi di compressione utilizzano finestre scorrevoli per il reference. La dimensione della finestra scorrevole di Brotli varia da 1 kb a 16 MB. Al contrario, GZIP ha una dimensione della finestra fissa di 32kb. Ciò significa che la finestra di Brotli è 512 volte più grande della finestra Deflate, il che non è rilevante poiché i file di testo più grandi di 32 kb sono raramente sui server Web.

La compatibilità della compressione del server è importante

Ogni volta che scarichiamo un file dal browser, il browser richiede al server quale tipo di compressione supporta attraverso un'intestazione. Ad esempio, se il browser supporta gzip E sgonfiare a decomprimere. Aggiungerà queste opzioni nel suo Accettazione, intestazione, io.e.,

ACCECIO-ENCODING = "Deflate, Gzip"

Quindi i browser che non supportano questi formati non li includeranno nella testata. Quando il server risponde con il contenuto, racconta al browser il formato di compressione attraverso un'intestazione, Codifica dei contenuti. Quindi, se supporta GZIP, allora l'intestazione assomiglia a questo:

Content-onoring = "gzip"

Intestazioni dei browser come Firefox che supportano la compressione di Brotli e il server web che hanno un modulo Brotli installato per assomigliare a questi:

Accept-Encoding = "Deflate, Gzip, Br"
Content-onoring = "gzip, br"

Quindi, se il browser utilizza il miglior formato di compressione e il server Web no, non va bene, poiché il server Web non manterrà i file con l'algoritmo di compressione preferita. Ecco perché è importante installare il modulo di compressione per il server web.

Installazione del server

Prima di andare avanti con la configurazione di Brotli, imposteremo il nostro server Nginx. Prima di ciò sudo Aggiornamento APT-get La tua distribuzione di Ubuntu e digita i seguenti comandi nel tuo terminale bash.

ubuntu@ubuntu: ~ $ sudo apt-get update
ubuntu@ubuntu: ~ $ sudo apt -get install nginx -y
ubuntu@ubuntu: ~ $ sudo servizio nginx

Per abilitare la compressione di brotli nell'NGINX, compileremo il nostro .Quindi moduli secondo i dettagli della nostra versione Nginx. Come mostrato, la digitazione del comando seguente emetterà la versione Nginx:

ubuntu@ubuntu: ~ $ nginx -v
versione nginx: nginx/1.18.0 (Ubuntu)

Usa il Wget Comando insieme al dettaglio della versione Nginx per scaricare il codice sorgente dal sito Web Nginx.

ubuntu@ubuntu: ~ $ wget https: // nginx.org/download/nginx-1.18.0.catrame.Gz
--2021-02-07 02: 57: 33-- https: // nginx.org/download/nginx-1.18.0.catrame.Gz
Risoluzione di Nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2A05: D014: EDB: 5702 :: 6, ..
Collegamento a Nginx.org (nginx.org) | 3.125.197.172 |: 443 ... connesso.
Richiesta http inviata, in attesa di risposta ... 200 ok
Lunghezza: 1039530 (1015K) [Applicazione/Otto-Stream]
Salvataggio a: 'nginx-1.18.0.catrame.gz '
nginx-1.18.0.catrame.GZ 100%[============================================ ====================>] 1015k 220kb/s in 4.8s
2021-02-07 02:57:38 (212 kb/s)-'nginx-1.18.0.catrame.GZ 'salvato [1039530/1039530]

Useremo questo codice sorgente per compilare *.Quindi binari per la compressione di Brotli. Ora estrai il file utilizzando il comando seguente.

ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.catrame.Gz

Configurazione del modulo Brotli

Ora Google ha rilasciato il modulo Brotli per Nginx. Cloneremo il modulo dal repository di Google.

ubuntu@ubuntu: ~ $ git clone https: // github.com/Google/Ngx_Brotli -RECURSIVE.

Noi CD dentro nginx-1.18.0 cartella per configurare il modulo Brotli dinamico.

ubuntu@ubuntu: ~ $ cd nginx-1.18.0/
ubuntu@ubuntu: ~ $ sudo ./Configura--With-compat --Add-Dynamic-Module =… /NGX_BROTLI

Nota: è possibile ricevere il seguente errore durante la configurazione

./Configura: Errore: il modulo di riscrittura HTTP richiede la libreria PCRE.
È possibile disabilitare il modulo usando--Without-http_rewrite_module
opzione o installare la libreria PCRE nel sistema o creare la libreria PCRE
staticamente dalla sorgente con nGinx usando--with-pcre = opzione.

In tal caso, eseguire il seguente comando per installare la libreria PCRE

ubuntu@ubuntu: ~ $ sudo apt-get Installa libpcre3-dev -y

Compilazione del modulo

Useremo il Fare comando di creare un file moduli cartella all'interno dell'NGINX-1.18.0 directory.

ubuntu@ubuntu: ~ $ sudo make moduli

Noi usiamo il cp comando di copiare ngx_http_brotli*.COSÌ file da nginx-1.18.0/objs cartella alla cartella moduli.

ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/
ubuntu@ubuntu: ~ $ sudo cp ngx_http_brotli*.COSÌ /usr/share/nginx/moduli

Ora elenca il contenuto dei file utilizzando il ls comando. Noterai che è costituito da due diversi file di moduli, i.e.:

ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.COSÌ
ngx_http_brotli_filter_module.COSÌ
ngx_http_brotli_static_module.COSÌ
  • Modulo Brotli regolare: NGX_HTTP_BROTLI_FILTER_MODULE.Quindi il modulo comprime tutti i file al volo e quindi richiede più risorse computazionali
  • Modulo statico Brotli: NGX_HTTP_BROTLI_STATIC_MODULE.Quindi il modulo gli consente di servire file statici pre-compressi, quindi meno ad alta intensità di risorse.

Ora usa il tuo editor preferito per aprire/etc/nginx/nginx.FILE Conf per aggiungere i moduli di caricamento brotli per iniziare la configurazione Brotli includendo le seguenti righe:

ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.conf
# Sezione Modulo di caricamento
load_module "moduli/ngx_http_brotli_filter_module.COSÌ";
load_module "moduli/ngx_http_brotli_static_module.COSÌ";

Includeremo anche percorsi di cartelle di configurazione /etc/nginx/conf.D/*.conf

E /usr/share/nginx/moduli/*.conf Nel file sopra come:

http
# Includere le cartelle configs
includere/etc/nginx/conf.D/*.conf;
includere/usr/share/nginx/moduli/*.conf;

Per aggiungere la configurazione Brotli Apri/etc/nginx/conf.d/brotli.conf

file in vim editor e abilita brotli impostando le seguenti direttive di configurazione:

brotli on;
brotli_static on;
brotli_comp_level 6;
Applicazione Brotli_Types/RSS+XML Applicazione/XHTML+XML
Testo/CSS Testo/pianura;

IL "brotli off | on"Il valore abilita o disabilita la compressione dinamica o sulla mosca del contenuto.

IL 'brotli_ static on ' Abilita al server Nginx di verificare se i file pre-compressi con il .Esistono o no le estensioni BR. Possiamo anche trasformare questa impostazione in un'opzione spento O Sempre. IL Sempre Il valore consente al server di inviare contenuti pre-compressi senza confermare se il browser lo supporta o no. Poiché Brotli è ad alta intensità di risorse, questo modulo è più adatto per ridurre le situazioni di collo di bottiglia.

IL "brotli_comp_level 6"La direttiva imposta il livello di qualità di compressione dinamica su 6. Può variare da 0 a 11.

Infine, abilitare la compressione dinamica per specifici tipi di mime, mentre le risposte di testo/HTML sono sempre compresse. La sintassi predefinita per questa direttiva è brotli_types [tipo mime]. Puoi trovare di più sulla direttiva di configurazione su GitHub.

Salva le modifiche, riavvia il servizio NGINX digitando "Sudo Service Riavvia Nginx" Ed è tutto fatto.

Conclusione

Dopo le modifiche, noterai alcuni evidenti miglioramenti nelle metriche delle prestazioni. Tuttavia, viene fornito con un leggero svantaggio dell'aumento del carico della CPU alle ore di punta. Per evitare tali situazioni tieni d'occhio l'uso della CPU; Se raggiunge il 100% regolarmente, possiamo utilizzare molte opzioni secondo le nostre preferenze, come presentare contenuto pre-compresso o statico, abbassare il livello di compressione e disattivare la compressione al volo, tra molti.