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 vongzip
verwendet wird, um die Größe der an Website-Besucher gesendeten Inhalte zu verringern.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie:
-
Ein Ubuntu 16.04-Server, der gemäß denInitial Server Setup with Ubuntu 16.04 tutorial eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall
-
Nginx wurde auf Ihrem Server installiert, indem Sie denHow To Install Nginx on Ubuntu 16.04 tutorial folgen
[[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 Textgzip
durchzufü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 vongzip
mithilfe 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 vongzip
nach 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 Nginxgzip
zu ä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 vongzip
tandardmäßig durch die Direktive vongzip on
aktiviert 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 Direktive
gzip_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 Direktive
gzip_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: gzip
in der Ausgabe zu finden.
In diesem Fall haben Sie die Komprimierung vongzip
in Nginx erfolgreich konfiguriert!
Fazit
Das Ändern der Nginx-Konfiguration, um die Komprimierung vongzip
vollstä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.