Hinzufügen des gzip-Moduls zu Nginx unter Ubuntu 16.04

Einführung

Wie schnell eine Website geladen wird, hängt von der Größe aller Dateien ab, die vom Browser heruntergeladen werden müssen. Durch die Reduzierung der Größe der zu übertragenden Dateien kann die Website nicht nur schneller geladen werden, sondern auch kostengünstiger für diejenigen, die für die Bandbreitennutzung zahlen müssen.

gzip ist ein beliebtes Datenkomprimierungsprogramm. Sie können Nginx so konfigurieren, dass esgzip verwendet, um Dateien zu komprimieren, die es im laufenden Betrieb bereitstellt. Diese Dateien werden dann von den Browsern dekomprimiert, die sie beim Abrufen ohne Verluste unterstützen, jedoch mit dem Vorteil, dass weniger Daten zwischen dem Webserver und dem Browser übertragen werden.

Aufgrund der Funktionsweise der Komprimierung im Allgemeinen, aber auch der Funktionsweise vongzip, werden bestimmte Dateien besser komprimiert als andere. Zum Beispiel werden Textdateien sehr gut komprimiert, und das Ergebnis ist oft mehr als doppelt so groß. Andererseits werden Bilder wie JPEG- oder PNG-Dateien von Natur aus bereits komprimiert, und die zweite Komprimierung mitgzip führt zu geringen oder keinen Ergebnissen. Durch das Komprimieren von Dateien werden Serverressourcen verbraucht. Es empfiehlt sich daher, nur die Dateien zu komprimieren, deren Größe sich erheblich verringert.

In diesem Handbuch wird erläutert, wie Sie auf Ihrem Ubuntu 16.04-Server installiertes Nginx so konfigurieren, dass die Komprimierung vongzipverwendet wird, um die Größe der an Website-Besucher gesendeten Inhalte zu verringern.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

[[Schritt-1 - Erstellen von Testdateien]] == Schritt 1 - Erstellen von Testdateien

In diesem Schritt erstellen wir mehrere Testdateien im Standardverzeichnis von Nginx, um die Komprimierung von Textgzipdurchzuführen.

Um zu entscheiden, welche Art von Datei über das Netzwerk bereitgestellt wird, analysiert Nginx den Dateiinhalt nicht, da dies nicht schnell genug wäre. Stattdessen wird nur die Dateierweiterung nachgeschlagen, um dieMIME type zu ermitteln, die den Zweck der Datei angeben.

Aufgrund dieses Verhaltens ist der Inhalt der Testdateien irrelevant. Durch die richtige Benennung der Dateien können wir Nginx täuschen, dass eine vollständig leere Datei ein Bild und die andere beispielsweise ein Stylesheet ist.

In unserer Konfiguration komprimiert Nginx keine sehr kleinen Dateien. Daher werden Testdateien mit einer Größe von genau 1 KB erstellt. Auf diese Weise können wir überprüfen, ob Nginx die Komprimierung dort verwendet, wo es sollte, und einen Dateityp komprimieren, ohne dies bei den anderen zu tun.

Erstellen Sie mittruncate eine 1-Kilobyte-Datei mit dem Namentest.html im Standard-Nginx-Verzeichnis. Die Erweiterung gibt an, dass es sich um eine HTML-Seite handelt.

sudo truncate -s 1k /var/www/html/test.html

Erstellen wir auf die gleiche Weise ein paar weitere Testdateien: einejpg-Bilddatei, eincss-Stylesheet und einejs-s JavaScript-Datei.

sudo truncate -s 1k /var/www/html/test.jpg
sudo truncate -s 1k /var/www/html/test.css
sudo truncate -s 1k /var/www/html/test.js

Der nächste Schritt besteht darin, zu überprüfen, wie sich Nginx in Bezug auf die Komprimierung bei einer Neuinstallation mit den soeben erstellten Dateien verhält.

[[Schritt 2 - Überprüfung des Standardverhaltens]] == Schritt 2 - Überprüfung des Standardverhaltens

Überprüfen wir, ob die HTML-Datei mit dem Namentest.html komprimiert wird. Der Befehl fordert eine Datei von unserem Nginx-Server an und gibt an, dass es in Ordnung ist, den komprimierten Inhalt vongzipmithilfe eines HTTP-Headers (Accept-Encoding: gzip) bereitzustellen.

curl -H "Accept-Encoding: gzip" -I http://localhost/test.html

Als Antwort sollten mehrere HTTP-Antwortheader angezeigt werden:

Nginx-Antwortheader

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 19 Jan 2016 20:04:12 GMT
Content-Type: text/html
Last-Modified: Tue, 04 Mar 2014 11:46:45 GMT
Connection: keep-alive
Content-Encoding: gzip

In der letzten Zeile sehen Sie den Header vonContent-Encoding: gzip. Dies sagt uns, dassgzip Komprimierung verwendet wurde, um diese Datei zu senden. Dies geschah, weil unter Ubuntu 16.04 in Nginx die Komprimierung vongzipnach der Installation mit den Standardeinstellungen automatisch aktiviert wurde.

Standardmäßig komprimiert Nginx jedoch nur HTML-Dateien. Alle anderen Dateien einer Neuinstallation werden unkomprimiert bereitgestellt. Um dies zu überprüfen, können Sie unser Testbild mit dem Namentest.jpg auf die gleiche Weise anfordern.

curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg

Das Ergebnis sollte etwas anders sein als zuvor:

Nginx-Antwortheader

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 19 Jan 2016 20:10:34 GMT
Content-Type: image/jpeg
Content-Length: 0
Last-Modified: Tue, 19 Jan 2016 20:06:22 GMT
Connection: keep-alive
ETag: "569e973e-0"
Accept-Ranges: bytes

Die Ausgabe enthält keinenContent-Encoding: gzip-Header. Dies bedeutet, dass die Datei ohne Komprimierung bereitgestellt wurde.

Sie können den Test mit dem Test-CSS-Stylesheet wiederholen.

curl -H "Accept-Encoding: gzip" -I http://localhost/test.css

Auch hier wird keine Komprimierung in der Ausgabe erwähnt.

Nginx-Antwortheader für CSS-Datei

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 19 Jan 2016 20:20:33 GMT
Content-Type: text/css
Content-Length: 0
Last-Modified: Tue, 19 Jan 2016 20:20:33 GMT
Connection: keep-alive
ETag: "569e9a91-0"
Accept-Ranges: bytes

Der nächste Schritt besteht darin, Nginx so zu konfigurieren, dass nicht nur komprimierte HTML-Dateien bereitgestellt werden, sondern auch andere Dateiformate, die von der Komprimierung profitieren können.

[[Schritt-3 - Konfigurieren von Nginx-39-s-GZIP-Einstellungen]] == Schritt 3 - Konfigurieren der GZIP-Einstellungen von Nginx

Um die Konfiguration von Nginxgzipzu ändern, öffnen Sie die Hauptkonfigurationsdatei von Nginx innano oder Ihrem bevorzugten Texteditor.

sudo nano /etc/nginx/nginx.conf

Suchen Sie den Abschnitt mit den Einstellungen vongzip, der folgendermaßen aussieht:

/etc/nginx/nginx.conf

. . .
##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
. . .

Sie können sehen, dass die Komprimierung vongziptandardmäßig durch die Direktive vongzip onaktiviert ist. Einige zusätzliche Einstellungen werden jedoch mit dem Kommentarzeichen von#auskommentiert. In diesem Abschnitt werden einige Änderungen vorgenommen:

  • Aktivieren Sie die zusätzlichen Einstellungen, indem Sie alle kommentierten Zeilen auskommentieren (d. H. Indem Sie# am Zeilenanfang löschen).

  • Fügen Sie die Direktivegzip_min_length 256; hinzu, die Nginx anweist, keine Dateien zu komprimieren, die kleiner als 256 Byte sind. Dies sind sehr kleine Dateien, die von der Komprimierung kaum profitieren.

  • Fügen Sie der Direktivegzip_types zusätzliche Dateitypen hinzu, die Web-Schriftarten,ico-Symbole und SVG-Bilder angeben.

Nachdem diese Änderungen übernommen wurden, sollte der Abschnitt Einstellungen folgendermaßen aussehen:

/etc/nginx/nginx.conf

. . .
##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
. . .

Speichern und schließen Sie die Datei, um sie zu beenden.

Laden Sie Nginx neu, um die neue Konfiguration zu aktivieren.

sudo systemctl reload nginx

Im nächsten Schritt prüfen Sie, ob Änderungen an der Konfiguration wie erwartet durchgeführt wurden.

[[Schritt 4 - Überprüfung der neuen Konfiguration] == Schritt 4 - Überprüfung der neuen Konfiguration

Wir können dies genau wie in Schritt 2 testen, indem wircurl für jede der Testdateien verwenden und die Ausgabe auf den HeaderContent-Encoding: gzip untersuchen.

curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
curl -H "Accept-Encoding: gzip" -I http://localhost/test.js

Jetzt sollten nurtest.jpg, eine Bilddatei, unkomprimiert bleiben. In allen anderen Beispielen sollten Sie in der Lage sein, den Header vonContent-Encoding: gzipin der Ausgabe zu finden.

In diesem Fall haben Sie die Komprimierung vongzipin Nginx erfolgreich konfiguriert!

Fazit

Das Ändern der Nginx-Konfiguration, um die Komprimierung vongzipvollständig zu nutzen, ist einfach, aber die Vorteile können immens sein. Nicht nur Besucher mit begrenzter Bandbreite erhalten die Website schneller, sondern auch Google freut sich darüber, dass die Website schneller geladen wird. Geschwindigkeit gewinnt als wichtiger Bestandteil des modernen Web an Bedeutung und die Verwendung vongzip ist ein großer Schritt, um sie zu verbessern.