Verwenden der Brotli-Komprimierung in NGINX

Brüderlich gewinnt immer mehr an Fahrt als der Komprimierungsalgorithmus für Hochleistungs-Websites. Brotli wurde 2013 von Google erstellt, um die Größe von WOFF-Dateien zu verringern, und wurde 2016 als Teil von standardisiert RFC-7932. Das Verkaufsargument für Brotli ist bessere Kompression als Gzip – mit ähnlicher CPU-Auslastung. Eine bessere Komprimierung führt zu einer schnelleren Leistung, aber wie viel besser ist sie?

Verwenden von Brotli in NGINX

Um das herauszufinden, müssen wir die Brotli-Komprimierung aktivieren. Gzip ist seit einiger Zeit in NGINX verfügbar. Es ist ein bisschen fummelig sicherzustellen, dass Sie alle geeigneten Mime-Typen komprimieren, aber meistens ist es einfach einzurichten und loszulegen.

Leider ist Brotli nicht Teil des standardmäßigen NGINX-Pakets zu diesem Zeitpunkt, sodass Sie es als dynamisches oder statisches Modul laden müssen. Das Brotli NGINX-Modul wird derzeit von den Leuten bei Google entwickelt und gepflegt.

Der einfache (aber teure) Weg

NGINX Plus hat offizielle Unterstützung für das Brotli-Modul. Sie haben die ganze harte Arbeit erledigt, das Modul für Sie in das NGINX Plus-Repository zu packen. Es ist nur ein apt-get install ein Weg! Das heißt – wenn Sie ein zahlender Kunde sind.

Der harte Weg

Da wir billig sind, haben wir keinen Zugriff auf das NGINX Plus-Repository. Wir haben nur die Open-Source-Version von NGINX, was bedeutet, dass wir das Modul von Hand laden müssen. Der Ablauf ist ungefähr so:

  • Installieren Sie eine Menge Prereqs
  • Kompilieren Sie das Modul für Ihr System (stöhnen)
  • Konfigurieren Sie NGINX für die Verwendung des neu kompilierten Moduls

Abhängigkeiten installieren

Auch wenn Sie NGINX wahrscheinlich über eine Art Paketmanager (apt, yum, was auch immer) installiert haben, benötigen Sie immer noch die Quelle für die installierte Version. Noch schlimmer ist, dass Sie alle Abhängigkeiten benötigen, für die die Quelle ursprünglich kompiliert wurde. Von dem Pferdemaul:

Dynamische Module müssen mit derselben Version von NGINX kompiliert werden, in die sie geladen werden.

Und vom Google Brotli Modulinstallation Dokumente:

Sie müssen genau die gleichen ./configure-Argumente wie Ihre Nginx-Konfiguration verwenden und –with-compat –add-dynamic-module=/path/to/ngx_brotli an das Ende anhängen, andernfalls erhalten Sie ein „Modul ist nicht binärkompatibel ” Fehler beim Start. Sie können nginx -V ausführen, um die Konfigurationsargumente für Ihre Nginx-Installation abzurufen.

Das klingt alles kompliziert und schrecklich, aber zum Glück ist es nicht so schlimm, wenn Sie mit etwas blindem Glauben und ein wenig Kopieren/Einfügen einverstanden sind. In allen folgenden Beispielen verwenden wir Ubuntu 20.04.

Installieren aller Pre-Reqs

apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev \ 
libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev libxslt-dev

Sobald Sie diese haben, benötigen Sie die NGINX-Quelle und die Brotli-Modulquelle.

nginx -v

Ok, also brauchen wir 1.18.0, da das auf unserem System installiert ist. Wir müssen auch das Brotli-Modul von Github klonen. Es sind Git-Submodule im Spiel, stellen Sie also sicher, dass Sie beim Klonen des Brotli-Modul-Repositorys das verwenden --recursive Flagge!

wget 
tar -xzvf nginx-1.18.0.tar.gz


git clone  --recursive

Die richtigen Konfigurationsargumente finden

Erinnern Sie sich also an all das Gerede über binäre Kompatibilität? Als NGINX ursprünglich für Ihr System kompiliert wurde, wurde es mit einer ganzen Reihe von kompiliert Argumente konfigurieren. Wenn wir das Modul kompilieren, müssen wir sicherstellen, dass sie genau gleich sind, und wir müssen noch ein paar mehr hinzufügen! Um die ursprünglichen Konfigurationsargumente anzuzeigen, können wir die verwenden -V Flagge (achte diesmal auf den Großbuchstaben)

configure-arguments.min.png

Kopieren Sie diese riesige Liste von Konfigurationsargumenten und fügen Sie sie zur sicheren Aufbewahrung irgendwo ein. Jetzt kommt der lustige Teil.

Zeit zum Kompilieren, Baby

cd nginx-1.18.0



./configure [ALL THE CONFIGURE ARGUMENTS] \
--with-compat --add-dynamic-module=../ngx_brotli


make modules

Die kompilierten Module werden an die ausgegeben obj/ Ordner innerhalb des Quellverzeichnisses, sobald die Kompilierung erfolgreich ist. Wir müssen die verschieben .so Dateien an einen Ort, an dem NGINX sie finden kann.

cp objs/ngx_http_brotli_filter_module.so /usr/lib/nginx/modules
cp objs/ngx_http_brotli_static_module.so /usr/lib/nginx/modules

Hurra! Jetzt können wir NGINX konfigurieren. Noch Spaß?

Konfigurieren von NGINX

Dies ist der einfache Teil. Im nginx.conf Sie müssen das Modul laden. Dies muss das allererste in der Datei sein.

# for compressing responses on-the-fly
load_module modules/ngx_http_brotli_filter_module.so;
# for serving pre-compressed files
load_module modules/ngx_http_brotli_static_module.so;

Und dann müssen wir es einschalten! Sie können Brotli in bestimmten Standortblöcken oder auf Serverebene aktivieren.

brotli on;
brotli_types
    application/javascript
    application/json
    image/svg+xml
    text/css
    text/plain;
    # add more types as needed

Und schließlich müssen wir unsere Konfiguration testen, um sicherzustellen, dass wir alles richtig gemacht haben, und dann NGINX neu laden

nginx -t && nginx -s reload

Brotli in Aktion

Mal sehen, wie gut es funktioniert! Das JavaScript-Anwendungspaket für Request Metrics ist 600 KB unkomprimiert:

js-unkomprimiert.min.png

Und wenn wir Gzip es ist wie wir es normalerweise tun 209 KB a 65% die Ermäßigung.

js-gzip.min.png

Aber was passiert, wenn wir aktivieren Brüderlich stattdessen?

js-brotli.min.png

Die Datei wird komprimiert 161 KB a 48 KB (23 %) Verbesserung über gzip!

Lohnt es sich?

Es gibt nur einen Weg, das herauszufinden. Verwenden Sie ein Tool wie Request Metrics, um reale Leistungsmetriken von Ihren Benutzern zu erfassen. Wechseln Sie zu Brotli und messen Sie die Ergebnisse! Mit unserem neuen benutzerdefinierte Kennzeichnung Sie könnten sogar einen A/B-Test mit einigen Maschinen durchführen, die mit Gzip und anderen mit Brotli komprimieren. Es dauert nur wenige Sekunden, um den Agenten einzurichten und echte Daten zu erhalten.

Similar Posts

Leave a Reply

Your email address will not be published.