GNU/Linux >> Linux Esercitazione >  >> Debian

Come aggiungere il supporto per la compressione Brotli a Nginx su Debian 10

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.

  • https://brotli.org/
  • https://github.com/google/brotli
  • https://github.com/google/ngx_brotli
  • https://en.wikipedia.org/wiki/Brotli

Debian
  1. Come compilare lo strumento di compressione Brotli dal sorgente su Debian 9

  2. Come installare Nginx su Debian 8 (Jessie)

  3. Come installare Nginx su Debian 9 (Stretch)

  4. Come configurare Nginx con supporto HTTP/2 su Debian 9

  5. Come installare lo stack LEMP su Debian 10 Buster

Come installare Nginx con PHP-FPM su Debian 10

Come installare l'ultimo Nginx Mainline o Stable su Debian 11

Come installare Nginx Google Pagespeed su Debian 11 Bullseye

Come installare lo stack LEMP su Debian 11

Come installare Vai su Debian 11

Come aggiungere spazio di scambio su Debian 11