Nginx

Come abilitare la compressione Brotli in Nginx

Come abilitare la compressione Brotli in Nginx

La compressione Brotli è una tecnica di compressione per scopi generici ampiamente supportata da tutti 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 web non invii risorse di testo compresse 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 fare in modo che il nostro server fornisca file compressi Brotli.

sfondo

Le tecniche/gli algoritmi di compressione migliorano le prestazioni del sito Web riducendo le dimensioni del contenuto. Quindi i dati compressi richiedono un carico e un tempo di trasferimento ridotti. Tuttavia, ha un prezzo. I server utilizzano molte risorse computazionali per fornire una migliore velocità di compressione. Quindi, meglio è, più 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 era gzippato. Recentemente gzip è stato sostituito da un nuovo algoritmo di compressione noto come Brotli. È un algoritmo di compressione avanzato composto dalla codifica di Huffman, dall'algoritmo L77 e dalla modellazione del contesto. Al contrario, Gzip è basato sull'algoritmo Deflate.

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

La compatibilità con la compressione del server è importante

Ogni volta che scarichiamo un file dal browser, il browser richiede al server che tipo di compressione supporta tramite un'intestazione. Ad esempio, se il browser supporta gzip e sgonfiare decomprimere. Aggiungerà queste opzioni nel suo Accetta-codifica, intestazione, io.e.,

Accept-Encoding = "deflate, gzip"

Quindi i browser che non supportano questi formati non li includeranno nell'intestazione. Quando il server risponde con il contenuto, comunica al browser il formato di compressione tramite un'intestazione, Codifica del contenuto. Quindi, se supporta gzip, l'intestazione avrà questo aspetto:

Codifica contenuto=”gzip”

Le intestazioni dei browser come Firefox che supportano la compressione Brotli e il server web su cui è installato un modulo Brotli sono simili a queste:

Accept-Encoding = "deflate, gzip, br"
Codifica contenuto=”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 invierà i file con l'algoritmo di compressione preferito. Ecco perché è importante installare il modulo di compressione per il server web.

Installazione del server

Prima di procedere con la configurazione di Brotli, configureremo il nostro server Nginx. Prima di ciò sudo apt-get update la tua distribuzione Ubuntu e digita i seguenti comandi nel tuo terminale bash.

[email protected]:~$ sudo apt-get update
[email protected]:~$ sudo apt-get install nginx -y
[email protected]:~$ sudo service nginx start

Per abilitare la compressione Brotli in Nginx, compileremo il nostro .quindi moduli secondo i dettagli della nostra versione di Nginxx. Come mostrato, digitando il seguente comando verrà visualizzata la versione di Nginx:

[e-mail protetta]:~$ nginx -v
versione nginx: nginx/1.18.0 (Ubuntu)

Usa il wget comando insieme ai dettagli della versione di nginx per scaricare il codice sorgente dal sito Web di Nginx.

[e-mail protetta]:~$ 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
Risolvere nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5702::6,…
Connessione a nginx.org (nginx.org)|3.125.197.172|:443… connesso.
Richiesta HTTP inviata, in attesa di risposta… 200 OK
Lunghezza: 1039530 (1015K) [application/octet-stream]
Salvataggio in: 'nginx-1.18.0.catrame.gz'
nginx-1.18.0.catrame.gz             100%[============================================== ====================>]   1015 K   220 KB/s in 4.8s
07/02/2021 02:57:38 (212 KB/s) - "nginx-1".18.0.catrame.gz' salvato [1039530/1039530]

Useremo questo codice sorgente per compilare *.così binari per la compressione Brotli. Ora estrai il file usando il seguente comando.

[email protected]:~$ 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.

[email protected]:~$ git clone https://github.com/google/ngx_brotli --recursive.

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

[e-mail protetta]:~$ cd nginx-1.18.0/
[e-mail protetta]:~$ sudo ./configure --with-compat --add-dynamic-module=… /ngx_brotli

Nota: potresti ricevere il seguente errore durante la configurazione

./configure: errore: il modulo di riscrittura HTTP richiede la libreria PCRE.
Puoi disabilitare il modulo usando --senza-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, esegui il seguente comando per installare la libreria pcre

[email protected]:~$ sudo apt-get install libpcre3-dev -y

Compilazione del modulo

Useremo il rendere comando per creare un moduli cartella all'interno di nginx-1.18.0 directory.

[email protected]:~$ sudo make module

Noi usiamo il cp comando per copiare ngx_http_brotli*.così file dal nginx-1.18.0/oggetti cartella nella cartella dei moduli.

[e-mail protetta]:~$ cd /nginx-1.18.0/oggetti/
[email protected]:~$ sudo cp  ngx_http_brotli*.così /usr/share/nginx/modules

Ora elenca il contenuto dei file usando il ls comando. Noterai che è composto da due diversi file di modulo, i.e.:

[email protetta]:~$ ls ngx_http_brotli*.così
ngx_http_brotli_filter_module.così
ngx_http_brotli_static_module.così
  • Modulo Brotli regolare: Il ngx_http_brotli_filter_module.quindi il modulo comprime tutti i file al volo e quindi richiede più risorse di calcolo
  • Modulo Brotli Statico: Il ngx_http_brotli_static_module.quindi il modulo gli consente di servire file statici precompressi, quindi meno dispendiosi in termini di risorse.

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

[email protected]:~$ sudo vim /etc/nginx/nginx.conf
# Carica la sezione del modulo
load_module "moduli/ngx_http_brotli_filter_module.così";
load_module "moduli/ngx_http_brotli_static_module.così";

Includeremo anche i percorsi delle cartelle di configurazione /etc/nginx/conf.d/*.conf

e /usr/condividi/nginx/moduli/*.conf nel file sopra come:

http
# Includi cartelle di configurazione
includi /etc/nginx/conf.d/*.conf;
includi /usr/share/nginx/modules/*.conf;

Per aggiungere la configurazione Brotli apri il file /etc/nginx/conf.d/brotli.conf

file nel vim editor e abilitare Brotli impostando le seguenti direttive di configurazione:

brotli     su;
brotli_static        attivato;
brotli_comp_level          6;
brotli_types          application/rss+xml application/xhtml+xml
testo/css testo/normale;

Il "brotli off|onIl valore ” abilita o disabilita la compressione dinamica o al volo del contenuto.

Il 'brotli_ statico su' consente al server Nginx di verificare se i file precompressi con il .br estensioni esistono o no. Possiamo anche trasformare questa impostazione in un'opzione spento o sempre. Il sempre value consente al server di inviare contenuto precompresso senza confermare se il browser lo supporta o meno. Poiché Brotli richiede molte 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à della compressione dinamica a 6. Può variare da 0 a 11.

Infine, abilita la compressione dinamica per tipi MIME specifici, mentre le risposte text/html sono sempre compresse. La sintassi predefinita per questa direttiva è brotli_types [tipo mimo]. Puoi trovare ulteriori informazioni 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, presenta un leggero svantaggio di un aumento del carico della CPU nelle ore di punta. Per evitare tali situazioni, tieni d'occhio l'utilizzo della CPU; se raggiunge il 100% regolarmente, possiamo utilizzare molte opzioni secondo le nostre preferenze, come presentare contenuto precompresso o statico, abbassare il livello di compressione e disattivare la compressione al volo, tra le tante.

I 10 migliori giochi da giocare su Ubuntu
La piattaforma Windows è stata una delle piattaforme dominanti per i giochi a causa dell'enorme percentuale di giochi che si stanno sviluppando oggi p...
I 5 migliori giochi arcade per Linux
Al giorno d'oggi, i computer sono macchine serie utilizzate per i giochi. Se non riesci a ottenere il nuovo punteggio più alto, saprai cosa intendo. I...
Battaglia per Wesnoth 1.13.6 Sviluppo rilasciato
Battaglia per Wesnoth 1.13.6 rilasciato il mese scorso, è la sesta versione di sviluppo nella 1.13.x e offre una serie di miglioramenti, in particolar...