Brotli ist ein generischer verlustfreier Komprimierungsalgorithmus, der von Google als Alternative zu Gzip, Zopfli und Deflate entwickelt wurde und Daten mithilfe einer Kombination aus einer modernen Variante des LZ77-Algorithmus, Huffman-Codierung und Kontextmodellierung 2. Ordnung mit einem Komprimierungsverhältnis komprimiert vergleichbar mit den besten derzeit verfügbaren Allzweck-Komprimierungsmethoden. Es ist ähnlich schnell wie beim Ablassen, bietet aber eine dichtere Kompression.
Brotli ist Open-Source unter der MIT-Lizenz.
Nginx hat keinen offiziellen Support, aber es gibt ein von Google entwickeltes Drittanbietermodul namens ngx_brotli, das Sie verwenden können, um Nginx Unterstützung hinzuzufügen.
Diese Anleitung zeigt Ihnen, wie Sie Brotli-Unterstützung zum Nginx-Webserver auf einem Debian 10-System hinzufügen.
HINWEIS: In diesem Leitfaden wird "johndoe"
als Beispielnutzer und "example.com
" als Beispieldomain. Ersetzen Sie sie durch Ihre Namen.
Anforderungen
- Debian 10 (Buster)-Server
- Nginx-Version 1.11.5 oder höher
- Domänenname mit
A
/AAAA
Rekorde aufgestellt - TLS-Zertifikat
Erste Schritte
Überprüfen Sie Ihre Debian-Version:
lsb_release -ds
# Debian GNU/Linux 10 (buster)
Richten Sie die Zeitzone ein:
sudo dpkg-reconfigure tzdata
Aktualisieren Sie Ihre Betriebssystempakete (Software). Dies ist ein wesentlicher erster Schritt, da dadurch sichergestellt wird, dass Sie über die neuesten Updates und Sicherheitsfixes für die Standardsoftwarepakete Ihres Betriebssystems verfügen:
sudo apt update && sudo apt upgrade -y
Installieren Sie einige wichtige Pakete, die für die grundlegende Verwaltung des Debian-Betriebssystems erforderlich sind:
sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https
Schritt 1 – Installieren Sie Acme.sh und erhalten Sie ein TLS-Zertifikat von Let's Encrypt
Brotli erfordert, dass Sie HTTPS einrichten und verwenden. In diesem Teil erhalten wir ein vertrauenswürdiges Zertifikat von Let's Encrypt.
Laden Sie Acme.sh herunter und installieren Sie es:
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
Überprüfen Sie die Version:
acme.sh --version
# v2.8.2
Rufen Sie RSA- und ECDSA-Zertifikate für example.com:
ab
# 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
Nachdem Sie die obigen Befehle ausgeführt haben, befinden sich Ihre Zertifikate und Schlüssel an den folgenden Orten:
- RSA:
/etc/letsencrypt/example.com
- ECC/ECDSA:
/etc/letsencrypt/example.com_ecc
Schritt 2 – Installieren Sie Nginx aus dem offiziellen Nginx-Repository
Laden Sie das neueste Mainline-Nginx aus dem offiziellen Nginx-Repo herunter und installieren Sie es:
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
Überprüfen Sie die Nginx-Version:
sudo nginx -v
# nginx version: nginx/1.17.4
Nginx-Dienst aktivieren und starten:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Schritt 3 – Laden Sie den Brotli-Quellcode herunter und kompilieren Sie ihn
Nach der Installation von Nginx müssen wir das Brotli-Modul (ngx_brotli
) als dynamisches Nginx-Modul. Ab Nginx-Version 1.11.5 ist es möglich, einzelne dynamische Module zu kompilieren, ohne die komplette Nginx-Software zu kompilieren. In den nächsten Schritten werden wir das Brotli-Modul dynamisch erstellen, ohne das vollständige Nginx zu kompilieren.
Laden Sie die neueste Version des Nginx-Hauptquellcodes herunter und extrahieren Sie ihn:
wget https://nginx.org/download/nginx-1.17.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz
HINWEIS: Es ist sehr wichtig, dass die Versionsnummern des Nginx-Pakets und des Nginx-Quellcodes übereinstimmen. Wenn Sie Nginx 1.17.4 aus dem offiziellen Nginx-Repository installiert haben, müssen Sie dieselbe Version des Quellcodes herunterladen , 1.17.4 in diesem Fall.
Entfernen Sie nginx-1.17.4.tar.gz:
rm nginx-1.17.4.tar.gz
Klonen Sie ngx_brotli
von GitHub:
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
Navigieren Sie zum Nginx-Quellcodeverzeichnis:
cd ~/nginx-1.17.4
Laden Sie die erforderlichen Bibliotheken herunter:
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
Kompilieren Sie das ngx_brotli
als dynamisches Modul und kopieren Sie es in das Standardverzeichnis für Nginx-Module, /etc/nginx/modules:
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules
Dateien in /etc/nginx/modules
auflisten und Sie werden ngx_http_brotli_filter_module.so
sehen und ngx_http_brotli_static_module.so:
ls /etc/nginx/modules
Setzen Sie die Berechtigungen auf 644
für alle .so
Dateien:
sudo chmod 644 /etc/nginx/modules/*.so
Schritt 4 – Nginx konfigurieren
Wir sind bereit, die Brotli-Unterstützung in Nginx zu konfigurieren.
Führen Sie sudo vim /etc/nginx/nginx.conf
aus und fügen Sie die folgenden beiden Direktiven am Anfang der Datei hinzu, um neue Brotli-Module zu laden:
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Testen Sie die Konfiguration:
sudo nginx -t
Erstellen Sie ein Dokumentstammverzeichnis für example.com
und erstellen Sie index.html
mit etwas Inhalt darin:
sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit
Erstellen Sie einen virtuellen Host für example.com:
sudo vim /etc/nginx/conf.d/example.com.conf
Füllen Sie es mit der folgenden Konfiguration:
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;
}
Testen Sie die Konfiguration:
sudo nginx -t
Nginx neu laden:
sudo systemctl reload nginx.service
Besuchen Sie Ihre Website in Ihrem Webbrowser und öffnen Sie die Registerkarte „Netzwerk“ der Entwicklertools. Sie sehen Content-Encoding: br
in den Antwortheadern. Das ist der Indikator dafür, dass die Brotli-Komprimierung funktioniert.
Das ist es. Sie haben die Brotli-Komprimierung auf Ihrem Debian 10-System aktiviert.
Links
- https://brotli.org/
- https://github.com/google/brotli
- https://github.com/google/ngx_brotli
- https://en.wikipedia.org/wiki/Brotli