Detaillierte Erläuterung des Implementierungsprozesses von Nginx zur Aktivierung des Brotli-Komprimierungsalgorithmus

Detaillierte Erläuterung des Implementierungsprozesses von Nginx zur Aktivierung des Brotli-Komprimierungsalgorithmus

Vorwort

Um in Webanwendungen Datenverkehr zu sparen, die Größe der übertragenen Daten zu reduzieren und die Übertragungseffizienz zu verbessern, wird in der Regel gzip als Komprimierungsmethode verwendet. Heute stellen wir eine weitere, effizientere Komprimierungsmethode vor: brotli.

Brotli basiert auf einer modernen Variante des LZ77-Algorithmus, Huffman-Kodierung und Kontextmodellierung zweiter Ordnung. Die Softwareentwickler von Google haben im September 2015 eine erweiterte Version von Brotli veröffentlicht, die eine allgemeine verlustfreie Datenkomprimierung umfasst und insbesondere auf die HTTP-Komprimierung ausgerichtet ist.

Hinweis: Voraussetzung für die Verwendung des Algorithmus ist die Aktivierung von https, da Accept-Encoding: gzip, deflate im Anforderungsheader der http-Anforderung kein br enthält.
Weitere Informationen zum Brotli-Algorithmus finden Sie unter: https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Brotli

Browserunterstützung für das Brotli-Protokoll

Vergleich verschiedener Komprimierungsalgorithmen auf unterschiedlichen Ebenen

Aus der Abbildung können wir erkennen, dass die Komprimierungsalgorithmen Brotli im Vergleich zu Gzip im Allgemeinen eine bessere Gesamtleistung aufweisen, insbesondere bei der Dekomprimierungsgeschwindigkeit. Wenn wir uns für den Brotli-Algorithmus oder Gzip entscheiden, müssen wir ihn entsprechend dem tatsächlichen Szenario anpassen.

Brotli herunterladen

google/ngx_brotli Seit der Version vom Dezember 2016 ist google/brotli integriert, sodass wir die Bibliothek bagder/libbrotli nicht separat kompilieren müssen, was die Installation vereinfacht. Wir laden google/ngx_brotli herunter und entpacken es in das Verzeichnis /usr/src/ngx_brotli

cd /usr/src

Git-Klon https://github.com/google/ngx_brotli.git

Laden Sie dann google/brotli herunter und entpacken Sie es nach /usr/src/ngx_brotli/deps/brotli

cd /usr/src/ngx_brotli/deps und rm -rf brotli
git-Klon [email protected]:google/brotli.git
cd /usr/src/ngx_brotli und git-Submodul-Update --init

Brotli kompilieren

Nginx unterstützt dynamische Module seit Version 1.9.11. Seitdem müssen Sie Nginx nicht mehr neu kompilieren, um Module zu Nginx hinzuzufügen. Mit dynamischen Modulen können Sie zur Laufzeit selektiv Drittanbietermodule oder offizielle Nginx-Module laden. Die neue Implementierung bleibt über das API-Modul so weit wie möglich abwärtskompatibel.

Laden Sie das Nginx-Installationspaket herunter und entpacken Sie es

Bitte laden Sie das Nginx-Installationspaket herunter, das mit der aktuellen Nginx-Version identisch ist. Die offizielle Download-Adresse von nginx lautet: http://nginx.org/en/download.html. Hierbei wird davon ausgegangen, dass der aktuelle Server nginx die Version 1.14.2 aufweist.

Die aktuelle Nginx-Version können Sie über den Befehl

nginx -v

Ausgabe

Nginx-Version: nginx/1.14.2

Laden Sie das Nginx-Installationspaket herunter

cd /usr/src
wget http://59.80.44.46/nginx.org/download/nginx-1.14.2.tar.gz

Entpacken Sie das Installationspaket

tar -xvf nginx-1.14.2.tar.gz

Kompilieren dynamischer Module

Geben Sie zuerst das Verzeichnis des entpackten Nginx-Installationspakets ein, konfigurieren Sie es und verwenden Sie dann Make-Module.

cd nginx-1.14.2
./configure --with-compat --add-dynamic-module=/usr/src/ngx_brotli
Module erstellen

Parametersyntax: --add-dynamic-module=[absoluter Pfad zum Verzeichnis, in dem sich der Quellcode des Moduls befindet]

Überprüfen Sie nach Abschluss des Laufs das kompilierte Modul

ls objs/*.so

Ausgabe:

objs/ngx_http_brotli_filter_module.so objs/ngx_http_brotli_static_module.so

Kopieren Sie die kompilierte Moduldatei in das dynamische Modulladeverzeichnis von Nginx.

cp objs/{ngx_http_brotli_filter_module.so,ngx_http_brotli_static_module.so} /etc/nginx/modules

Registrieren von Brotli-Modulen

Um die Verwaltung dynamischer Nginx-Module zu erleichtern, wird empfohlen, eine Datei „modules.conf“ zu erstellen, um dynamische Module separat zu verwalten.

berühren Sie /etc/nginx/modules.conf

Fügen Sie die Datei module.conf in die Konfigurationsdatei /etc/nginx/nginx.conf ein, suchen Sie den folgenden Inhalt und ändern Sie ihn:

pid /var/run/nginx.pid;

/etc/nginx/modules.conf einschließen;

Öffnen Sie /etc/nginx/modules.conf und registrieren Sie das gerade kompilierte Brotli-Modul.

Brotli-Modul
Lademodulmodule/ngx_http_brotli_filter_module.so;
Lademodulmodule/ngx_http_brotli_static_module.so;

Brotli-Komprimierung aktivieren

Brotli und gzip können koexistieren, gzip muss nicht deaktiviert werden.

Aktivieren Sie Brotli in /etc/nginx/nginx.conf:

http {
  ...
  # gzip
  gzip an;
  gzip_min_länge 1k;
  gzip_puffer 4 32k;
  gzip_http_version 1.1;
  gzip_comp_level 5;
  gzip_types Text/Klartext/CSS-Anwendung/JSON-Anwendung/X-Javascript-Text/XML-Anwendung/XML-Anwendung/XML+RSS-Text/Javascript-Anwendung/Javascript;
  gzip_vary ein;
  gzip_proxied beliebig;
  gzip_disable "MSIE [1-6]\.";

  #brotli
  Brotli an;
  brotli_comp_level 6;
  brotli_puffer 16 8k;
  brotli_min_länge 20;
  brotli_types Text/Klartext/CSS-Anwendung/JSON-Anwendung/X-Javascript-Text/XML-Anwendung/Xml-Anwendung/Xml+RSS-Text/Javascript-Anwendung/Javascript-Bild/SVG+XML;
  ...
}

Konfigurationsdetails von gzip und brotli

Gzip-Tuning: Durch die Verwendung der Gzip-Komprimierungsfunktion können wir Bandbreite sparen, die Übertragung beschleunigen, ein besseres Erlebnis bieten und Kosten sparen. Dies ist also ein wichtiger Punkt. Für eine ausführliche Einführung in gzip klicken Sie hier;

gzip on aktiviert die Gzip-Komprimierung.

gzip_min_länge 1k

Legen Sie die Mindestanzahl an Bytes fest, die für komprimierte Seiten zulässig ist. Die Anzahl der Bytes für eine Seite wird aus dem Content-Length-Header abgerufen. Der Standardwert ist 0. Unabhängig davon, wie groß die Seite ist, wird sie komprimiert. Es wird empfohlen, den Wert größer als 1 KB festzulegen. Wenn er kleiner als 1 KB ist, kann die Seitengröße beim Komprimieren zunehmen.

gzip_puffer

Die Komprimierungspuffergröße gibt an, dass 4 Speichereinheiten mit 32 KB als Stream-Cache für das Komprimierungsergebnis verwendet werden. Der Standardwert ist, dass zum Speichern des GZIP-Komprimierungsergebnisses der gleiche Speicherplatz wie die ursprüngliche Datengröße verwendet wird.

gzip_http_version 1.1

Die komprimierte Version wird verwendet, um die HTTP-Protokollversion festzulegen. Der Standardwert ist 1.1. Derzeit unterstützen die meisten Browser bereits die GZIP-Dekomprimierung, sodass Sie den Standardwert verwenden können.

gzip_comp_level 5

Mit dem Komprimierungsverhältnis wird das GZIP-Komprimierungsverhältnis angegeben. 1 bedeutet das kleinste Komprimierungsverhältnis und die schnellste Verarbeitungsgeschwindigkeit, während 9 das größte Komprimierungsverhältnis und die schnellste Übertragungsgeschwindigkeit, aber langsame Verarbeitung und höhere CPU-Auslastung bedeutet. Die empfohlene Einstellung ist 5.

gzip_typen

Wird verwendet, um den Komprimierungstyp anzugeben. Der Typ „Text/HTML“ wird immer komprimiert.

gzip_vary auf

Es hängt mit dem HTTP-Header zusammen. Für den Proxyserver wird ein Vary-Header hinzugefügt. Einige Browser unterstützen die Komprimierung, andere nicht. Um Datenverschwendung zu vermeiden, wird bei Browsern, die dies nicht unterstützen, eine Komprimierung durchgeführt. Ob eine Komprimierung erforderlich ist, wird daher anhand des HTTP-Headers des Clients bestimmt.

gzip_proxied beliebig

Aktiviert, wenn nginx als Reverse-Proxy verwendet wird. Schaltet die vom Backend-Server zurückgegebenen Ergebnisse ein oder aus. Voraussetzung für die Übereinstimmung ist, dass der Backend-Server einen Header zurückgeben muss, der Via enthält. Die Standardeinstellung ist „Aus“. Optionale Parameterwerte:

  • off Komprimierung aller Proxy-Ergebnisdaten deaktivieren
  • abgelaufen Aktivieren Sie die Komprimierung, wenn der Header Expires-Headerinformationen enthält.
  • no-cache aktiviert die Komprimierung, wenn der Header die Cache-Control: no-cache Header-Informationen enthält.
  • no-store aktiviert die Komprimierung, wenn der Header die Cache-Control: no-store-Header-Information enthält
  • private aktiviert die Komprimierung, wenn der Header die Cache-Control:private-Header-Informationen enthält.
  • no_last_modified aktiviert die Komprimierung, wenn der Header nicht die Last-Modified-Header-Informationen enthält
  • no_etag aktiviert die Komprimierung, wenn der Header keine ETag-Headerinformationen enthält
  • auth aktiviert die Komprimierung, wenn der Header die Autorisierungsheaderinformationen enthält
  • any aktiviert die Komprimierung bedingungslos

gzip_deaktivieren

Deaktivieren Sie die GZIP-Komprimierung für IE6. Die Unterstützung von IE6 für die GZIP-Komprimierung ist sehr schlecht, was zum Einfrieren der Seite führen kann. Um Probleme mit IE6 zu vermeiden, wird empfohlen, diesen Parameter hinzuzufügen.

Brotli-Tuning

Google ist der Ansicht, dass die Zeit der Internetnutzer kostbar ist und nicht mit langen Ladezeiten von Webseiten verschwendet werden sollte. Daher hat Google im September 2015 den verlustfreien Komprimierungsalgorithmus Brotli eingeführt. Brotli komprimiert Daten durch eine Variante des LZ77-Algorithmus, Huffman-Kodierung und Textmodellierung zweiter Ordnung. Im Vergleich zu anderen Komprimierungsalgorithmen weist es eine höhere Komprimierungseffizienz auf. Für weitere Informationen zu Brotli klicken Sie bitte hier;

Hinweis: Wenn das Brotli-Modul nicht installiert ist, muss dieser Teil der Konfigurationselemente nicht konfiguriert werden und kann übersprungen werden.

Brotli auf

Aktivieren Sie die Brotli-Komprimierung.

brotli_comp_level 6

Komprimierungsverhältnis, wird verwendet, um das Brotli-Komprimierungsverhältnis anzugeben. 1 ist das kleinste Komprimierungsverhältnis und die schnellste Verarbeitungsgeschwindigkeit, 11 ist das größte Komprimierungsverhältnis. Die Übertragungsgeschwindigkeit ist schnell, aber die Verarbeitung ist langsam und es werden mehr CPU-Ressourcen verbraucht. Der Standardwert ist 6, Sie können also den Standardwert verwenden.

brotli_buffers 16 8k

Legt die Anzahl und Größe der Puffer fest, die zum Komprimieren von Antworten verwendet werden. Standardmäßig entspricht die Puffergröße einer Speicherseite. Standardwert: 32 4k|16 8k.

brotli_min_length 20

Legt die Mindestlänge einer zu komprimierenden Antwort fest. Die Länge wird ausschließlich durch das Antwortheaderfeld „Content-Length“ bestimmt. Der Standardwert ist 20.

Brotli-Typen

Wird verwendet, um den Komprimierungstyp anzugeben. Der Typ „Text/HTML“ wird immer komprimiert.

Die Konfigurationsdetails von gzip und brotli werden dem Code der Reverse-Proxy-Konfigurationsdatei hinzugefügt:

proxy_set_header Accept-Kodierung "";

Beispiel:

Server {
  ...
  Standort / {
    ...
    proxy_set_header Accept-Kodierung "";
    ...
  }
  ...
}

Starten Sie nginx neu, damit die Konfiguration wirksam wird

systemctl startet nginx neu

Die Brotli-Komprimierung kann nur bei https wirksam werden, da im Accept-Encoding: gzip, deflate-Anforderungsheader in der http-Anforderung kein br vorhanden ist.
Temporäre Dateien bereinigen

Sie sollten sich angewöhnen, nach jeder Kompilierung die aus dem Anwendungspaket extrahierten Dateien oder Verzeichnisse zu löschen.

rm -rf /usr/src/{nginx-1.14.2/,ngx_brotli/}

Überprüfen Sie abschließend, ob es funktioniert

Öffnen Sie die Webseite und debuggen Sie sie mit den Chrome-Entwicklertools. Sie finden content-encoding:br in der Spalte „Netzwerk“ und der Netzwerkzeitverbrauch wird erheblich reduziert.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispiel zum Aktivieren des Brotli-Komprimierungsalgorithmus für Nginx
  • Beispiel für die Aktivierung der Brotli-Algorithmus-Komprimierung in Nginx
  • Nginx verwendet den Gzip-Algorithmus zum Komprimieren von Nachrichten
  • Detaillierte Erläuterung der zugrunde liegenden Implementierungsmethode des Nginx-Polling-Algorithmus
  • Ein kurzes Verständnis mehrerer Planungsalgorithmen für den siebenschichtigen Lastenausgleich von Nginx
  • Nginx-Lastausgleichsalgorithmus und Failover-Analyse
  • C# implementiert den glatten, gewichteten Polling-Algorithmus von Nginx
  • Detaillierte Analyse der vier Planungsalgorithmen von nginx und erweiterte

<<:  So verwenden Sie Provide zur Implementierung der Statusverwaltung in Vue3

>>:  Detaillierte Erklärung zur Verwendung des Schlüsselworts ESCAPE in MySQL

Artikel empfehlen

So installieren und implementieren Sie MySQL 8.0 unter CentOS8

Die offizielle Version 8.0.11 von MySQL 8 wurde v...

Schaltflächen und Dropdown-Menüs für Studiennotizen in Bootstrap 3.0

Der vorherige Artikel war eine einfache Überprüfu...

Detaillierte Erklärung der schmerzlosen Token-Aktualisierungsmethode von Uniapp

Wenn das Front-End die Schnittstelle anfordert, w...

Zusammenfassung der Verwendung von setTimeout() in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. Der Unterschi...

So ändern Sie die CentOS-Serverzeit auf die Peking-Zeit

1. Ich habe ein VPS- und CentOS-System gekauft un...

Was bedeutet href=# in einem Link?

Links zur aktuellen Seite. ------------------- Übl...

Sicherheitsüberlegungen zur Windows-Serververwaltung

Webserver 1. Der Webserver schaltet unnötige IIS-...

So laden Sie Projekte im Linux-System in die Code Cloud hoch

Erstellen Sie ein neues Projekt test1 auf Code Cl...

So erzielen Sie mit CSS einen Daten-Hotspot-Effekt

Die Wirkung ist wie folgt: analysieren 1. Hier se...

Kopieren Sie den Inhalt einer Datei an das Ende einer anderen Datei in Linux

Problembeschreibung: Der Inhalt der Datei 11 laut...

Lösung zum Verhindern des Caching in Seiten

Lösung: Fügen Sie in <head> den folgenden Co...

W3C Tutorial (3): W3C HTML Aktivitäten

HTML ist eine Hybridsprache, die zum Veröffentlic...

CSS zur Erzielung einer kompatiblen Textausrichtung in verschiedenen Browsern

Beim Front-End-Layout des Formulars müssen wir hä...