Wie man die Brotli-Komprimierung in Nginx auf CentOS 8 aktiviert

Brotli ist ein verlustfreier Komprimierungsalgorithmus für allgemeine Zwecke, der von Google als Alternative zu Gzip, Zopfli und Deflate entwickelt wurde. Er komprimiert Daten mit einer Kombination aus einer modernen Variante des LZ77-Algorithmus, Huffman-Kodierung und Kontextmodellierung zweiter Ordnung mit einem Komprimierungsverhältnis, das mit den besten derzeit verfügbaren Komprimierungsmethoden für allgemeine Zwecke vergleichbar ist. Es ist ähnlich schnell wie Deflate, bietet aber eine dichtere Komprimierung.

Brotli steht unter der MIT-Lizenz als Open Source zur Verfügung.

Nginx hat keinen offiziellen Support, aber es gibt ein von Google entwickeltes Modul eines Drittanbieters namens ngx_brotli, das Sie verwenden können, um Unterstützung für Nginx hinzuzufügen.

Dieses Tutorial zeigt Ihnen, wie Sie Brotli-Unterstützung zum Nginx-Webserver auf dem CentOS 8-Server hinzufügen können.

HINWEIS: In diesem Leitfaden wird „johndoe" als Beispielbenutzer und „example.com“ als Beispieldomäne. Ersetzen Sie sie entsprechend Ihren Namen.

Anforderungen

  • CentOS 8-Server
  • Nginx-Version 1.11.5 oder höher
  • Domänenname mit A/AAAA Einträgen eingerichtet
  • TLS-Zertifikat

Erste Schritte

Überprüfen Sie Ihre CentOS-Version:

cat /etc/centos-release
# CentOS Linux release 8.0.1905 (Core)

Richten Sie die Zeitzone ein:

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

Aktualisieren Sie Ihre Betriebssystempakete (Software). Dies ist ein wichtiger erster Schritt, denn er stellt sicher, dass Sie über die neuesten Aktualisierungen und Sicherheitskorrekturen für die Standard-Softwarepakete Ihres Betriebssystems verfügen:

sudo dnf update -y

Installieren Sie einige wesentliche Pakete, die für die grundlegende Verwaltung des CentOS-Betriebssystems erforderlich sind:

sudo dnf install -y curl wget vim git unzip socat bash-completion epel-release socat && sudo dnf groupinstall "Development Tools"

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

Prüfen Sie die Version:

acme.sh --version
# v2.8.6

Erhalten Sie RSA- und ECDSA-Zertifikate für 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

Nach Ausführung der obigen Befehle befinden sich Ihre Zertifikate und Schlüssel an den folgenden Stellen:

  • RSA: /etc/letsencrypt/example.com
  • ECC/ECDSA: /etc/letsencrypt/example.com_ecc

Schritt 2 – Installieren Sie Nginx aus dem offiziellen Nginx-Repository

Sie müssen die neueste Mainline-Version von Nginx aus dem offiziellen Nginx-Repo herunterladen und installieren:

Installieren Sie die Voraussetzungen:

sudo yum install yum-utils

Um das yum-Repository einzurichten, erstellen Sie die Datei /etc/yum.repos.d/nginx.repo mit folgendem Inhalt:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Standardmäßig wird das Repository für stabile Nginx-Pakete verwendet. Wir müssen Mainline-Nginx-Pakete verwenden. Führen Sie den folgenden Befehl aus, um den Mainline-Quellcode zu verwenden:

sudo yum-config-manager --enable nginx-mainline

Um nginx zu installieren, führen Sie den folgenden Befehl aus:

sudo yum install -y nginx

Prüfen Sie die Nginx-Version:

sudo nginx -v
# nginx version: nginx/1.17.8

Aktivieren und starten Sie den Nginx-Dienst:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Schritt 3 – Herunterladen und Kompilieren des Brotli-Quellcodes

Nach der Installation von Nginx müssen wir das Brotli-Modul (ngx_brotli) als dynamisches Nginx-Modul erstellen. 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 als dynamisches Modul bauen, ohne die komplette Nginx zu kompilieren.

Laden Sie die neueste Version des Mainline-Quellcodes von Nginx herunter und extrahieren Sie ihn:

wget https://nginx.org/download/nginx-1.17.8.tar.gz && tar zxvf nginx-1.17.8.tar.gz

HINWEIS: Es ist sehr wichtig, dass die Versionsnummern des Nginx-Pakets und des Nginx-Quellcodes übereinstimmen. Wenn Sie Nginx 1.17.8 aus dem offiziellen Nginx-Repository installiert haben, müssen Sie die gleiche Version des Quellcodes herunterladen, in diesem Fall 1.17.8.

Entfernen Sie nginx-1.17.8.tar.gz:

rm nginx-1.17.8.tar.gz

Klon ngx_brotlivon 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.8

Laden Sie die erforderlichen Bibliotheken herunter:

sudo dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

Kompilieren Sie das ngx_brotlials 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

Listen Sie Dateien darin auf /etc/nginx/modulesund Sie sehen ngx_http_brotli_filter_module.sound ngx_http_brotli_static_module.so:

ls /etc/nginx/modules

Berechtigungen für alle .soDateien auf 644setzen:

sudo chmod 644 /etc/nginx/modules/*.so

Schritt 4 – Konfigurieren von Nginx

Wir sind bereit, die Brotli-Unterstützung in Nginx zu konfigurieren.

Führen sudo vim /etc/nginx/nginx.confSie die folgenden beiden Direktiven oben in der Datei aus und fügen Sie sie 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 Dokument-Stammverzeichnis für example.comund index.htmlmit einigen Inhalten 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

Laden Sie Nginx neu:

sudo systemctl reload nginx.service

Besuchen Sie Ihre Website in Ihrem Webbrowser und öffnen Sie die Registerkarte Netzwerk der Entwicklerwerkzeuge. Sie werden in den Antwortkopfzeilen sehenContent-Encoding: br. Das ist der Indikator, dass die Brotli-Komprimierung funktioniert.

Brotli-Unterstützung in Nginx

Kodierung von Inhalten

Das war’s. Sie haben die Brotli-Kompression auf Ihrem CentOS 8-System aktiviert.

Das könnte Dich auch interessieren …