Hinzufügen des gzip-Moduls zu Nginx unter CentOS 7

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.

http://www.gzip.org/ [+ gzip +] ist ein beliebtes Datenkomprimierungsprogramm. Sie können Nginx so konfigurieren, dass + gzip + verwendet wird, um Dateien zu komprimieren, die im laufenden Betrieb bereitgestellt werden. 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 allgemeinen Funktionsweise der Komprimierung, aber auch der Funktionsweise von "+ gzip ", 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 bereits aufgrund ihrer Beschaffenheit komprimiert, und die zweite Komprimierung mit " gzip +" 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 Nginx, das auf Ihrem CentOS 7-Server installiert ist, so konfigurieren, dass die Komprimierung "+ gzip +" verwendet wird, um die Größe der an Website-Besucher gesendeten Inhalte zu verringern.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

Schritt 1 - Testdateien erstellen

In diesem Schritt erstellen wir mehrere Testdateien im Standardverzeichnis von Nginx, um die Komprimierung von + gzip + zu simulieren.

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 den MIME-Typ zu ermitteln, der den Zweck der Datei angibt.

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 Kilobyte 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 eine 1-Kilobyte-Datei mit dem Namen "+ test.html " im Standardverzeichnis von Nginx, indem Sie " truncate +" verwenden. Die Erweiterung gibt an, dass es sich um eine HTML-Seite handelt.

sudo truncate -s 1k /usr/share/nginx/html/test.html

Erstellen Sie auf die gleiche Weise einige weitere Testdateien: eine "+ jpg " - Bilddatei, eine " css " - Stilvorlage und eine " js +" - JavaScript-Datei.

sudo truncate -s 1k /usr/share/nginx/html/test.jpg
sudo truncate -s 1k /usr/share/nginx/html/test.css
sudo truncate -s 1k /usr/share/nginx/html/test.js

Schritt 2 - Überprüfen des Standardverhaltens

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.

Überprüfen wir, ob die HTML-Datei mit dem Namen "+ test.html " mit Komprimierung geliefert wird. Der Befehl fordert eine Datei von unserem Nginx-Server an und gibt an, dass es in Ordnung ist, komprimierten Inhalt mit einem HTTP-Header zu liefern (" Accept-Encoding: gzip +").

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.6.3
Date: Fri, 11 Mar 2016 12:53:06 GMT
Content-Type: text/html
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT
Connection: keep-alive
ETag: "56e2be82-400"
Accept-Ranges: bytes

In der Antwort gibt es keinerlei Erwähnung von "+ gzip ". Dies sagt uns, dass die " gzip " - Komprimierung auf dem Server nicht aktiviert ist. Unter CentOS 7 ist die Unterstützung von " gzip " in der Standardkonfiguration von Nginx vollständig deaktiviert. Wenn die Komprimierung aktiviert ist, wird in der Ausgabe ein zusätzlicher Header mit der Aufschrift " Content-Encoding: gzip +" angezeigt.

Nicht nur HTML-Seiten, sondern auch alle anderen Dateien einer Neuinstallation werden unkomprimiert bereitgestellt. Um dies zu überprüfen, können Sie auf die gleiche Weise unser Testbild mit dem Namen "+ test.jpg +" anfordern.

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

Das Ergebnis sollte praktisch identisch sein wie zuvor:

Nginx-Antwortheader

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 12:58:03 GMT
Content-Type: image/jpeg
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT
Connection: keep-alive
ETag: "56e2be85-400"
Accept-Ranges: bytes

Die Ausgabe enthält auch keinen Header "+ Content-Encoding: gzip +", dh die Datei wurde ohne Komprimierung bereitgestellt.

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.6.3
Date: Fri, 11 Mar 2016 12:59:04 GMT
Content-Type: text/css
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT
Connection: keep-alive
ETag: "56e2be85-400"
Accept-Ranges: bytes

Schritt 3 - Aktivieren und Konfigurieren des gzip-Moduls von Nginx

Der nächste Schritt besteht darin, Nginx so zu konfigurieren, dass die Komprimierung für alle Dateiformate aktiviert wird, die von der Komprimierung profitieren können.

Das + gzip + Modul ist ein Kernmodul in Nginx, das heißt, es ist bereits installiert, muss aber aktiviert und konfiguriert werden. Bei einer neuen Nginx-Installation unter CentOS 7 werden alle Dateien mit der Erweiterung "+ .conf " aus dem Verzeichnis " / etc / nginx / conf.d +" automatisch geladen. Dies ermöglicht die einfache Konfiguration zusätzlicher Module.

Um das Nginx-Modul "+ gzip " zu aktivieren, erstellen Sie die Konfigurationsdatei " gzip.conf " mit " nano +" oder Ihrem bevorzugten Texteditor.

sudo nano /etc/nginx/conf.d/gzip.conf

Fügen Sie den folgenden Inhalt ein.

/etc/nginx/conf.d/gzip.conf

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

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
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/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.

Lassen Sie uns die hier vorgenommenen Konfigurationseinstellungen durchgehen:

  • Die Direktive + gzip on + aktiviert die Gzip-Komprimierung.

  • + gzip_disable" msie6 "+ schließt Internet Explorer 6 von den Browsern aus, die komprimierte Dateien empfangen, da IE6 + gzip + überhaupt nicht unterstützt.

  • Die Einstellungen "+ gzip_vary " und " gzip_proxied +" stellen sicher, dass Proxy-Server zwischen dem Browser und dem Server die Komprimierung korrekt erkennen.

  • + gzip_comp_level 6 + legt fest, wie viele Dateien komprimiert werden. Je höher die Zahl, desto höher die Komprimierungsstufe und der Ressourcenverbrauch. 6 ist ein vernünftiger Mittelweg.

  • "+ gzip_http_version 1.1 " wird verwendet, um die " gzip " - Komprimierung auf Browser zu beschränken, die das HTTP / 1.1-Protokoll unterstützen. Wenn der Browser dies nicht unterstützt, besteht eine gute Chance, dass er auch nicht " gzip +" unterstützt.

  • + gzip_min_length 256 + weist Nginx an, Dateien mit einer Größe von weniger als 256 Byte nicht zu komprimieren. Sehr kleine Dateien profitieren kaum von der Komprimierung.

  • + gzip_types + listet alle MIME-Typen auf, die komprimiert werden. In diesem Fall enthält die Liste HTML-Seiten, CSS-Stylesheets, Javascript- und JSON-Dateien, XML-Dateien, Symbole, SVG-Bilder und Webschriften.

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

sudo systemctl restart nginx

Schritt 4 - Überprüfen der neuen Konfiguration

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

Wir können dies genau wie in Schritt 2 testen, indem wir "+ curl" für jede der Testdateien verwenden und die Ausgabe für den Header "+ Content-Encoding: gzip" untersuchen.

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

Als Antwort sollte der Header "+ Content-Encoding: gzip +" angezeigt werden, der vorher nicht vorhanden war:

Nginx-Antwortheader

HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 13:19:16 GMT
Content-Type: text/html
Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT
Connection: keep-alive
Vary: Accept-Encoding

Sie können alle anderen Dateien auf dieselbe Weise testen:

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 sollte nur + test.jpg +, eine Bilddatei, unkomprimiert bleiben. In beiden anderen Beispielen sollte der Header "+ Content-Encoding: gzip +" in der Ausgabe enthalten sein.

Wenn das der Fall ist, haben Sie die + gzip + - Komprimierung in Nginx erfolgreich konfiguriert!

Fazit

Die Nginx-Konfiguration so zu ändern, dass die "+ gzip " - Komprimierung vollständig verwendet wird, 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 Webs an Bedeutung und die Verwendung von " gzip +" ist ein großer Schritt, um sie zu verbessern.