Diese Beitrag zeigt, wie man HTTP/2 auf einem Linux-Server unter Plesk installiert und aktiviert. HTTP/2 ist der Nachfolger von HTTP 1.1. und wird von Plesk ab Version 12.5.30 unterstützt. Um HTTP/2 unter Plesk zu installieren, ist etwas Vorarbeit notwendig: Man benötigt NGinx als Reverse Proxy Server zu Apache. Erst dann kann HTTP/2 unter Plesk aktiviert werden.

Welche Vorteile bringt HTTP/2?

Gegenüber HTTP 1.1. bringt das HTTP/2-Protokoll unter Anderem folgende Vorteile, die für schnellere Ladezeiten führen:

  • HTTP/2 ist im Gegensatz zu HTTP 1.1 ein binäres Protokoll (HTTP 1.1. ist reiner Text), d.h. schon ohne Kompression wesentlich kompakter.
  • Server-Anfragen und -Antworten werden per Multiplexing ausgeführt. D.h. es können mehrere Requests und der Empfang von Daten parallel ausgeführt werden.
  • Header-Compression: HTTP/2-Header werden komprimiert und dadurch schneller übertragen.
  • Data-Streaming: Das Streaming von Daten ist in HTTP/2 effektiver gelöst.

Doch bevor wir unter Plesk in den Genuss dieser Vorteile kommen, muss zuerst NGinx als Reverse Proxy Server dem Apache Webserver vorgeschaltet werden.

Plesk: NGinx als Reverse Proxy installieren

NGinx ist ebenfalls ein Webserver, der hier als Reverse Proxy alle Anfragen der Clients an Apache durchreicht. Seiten, die dann von Apache ausgeliefert werden, erhalten die Clients ebenfalls von NGinx. Hinter einem Reverse-Proxy können so z.B. mehrere Apache Webserver platziert werden, auf welche die Eingangslast verteilt wird.

Aus der Sicht der Client findet die komplette Kommunikation direkt mit NGinx statt. NGinx bringt in unserem Fall folgende Vorteile:

  • NGinx kann ca. 4 x mehr Client-Anfragen managen, als Apache.
  • Hinter NGinx befindet sich neben Apache der NGinx Cache. D.h. es findet auch hier eine Art Lastverteilung zwischen Zielserver und Cache statt.
  • HTTP/2 ist in NGinx performanter implementiert.

Doch nun zur Installation von NGinx unter Plesk:

Zuerst muss das NGinx Paket in Plesk unter Tools & Settings / Updates hinzugefügt werden:

Danach muss der NGinx-Dienst in Plesk unter Tools & Settings / Services Management manuell gestartet werden. Sollte sich beim Start von NGinx der Apache-Dienst verabschieden, muss dieser ebenfalls noch mal manuell angeschubst werden. Wichtig: Beide Dienste müssen laufen:

Als Nächstes loggen wir uns per SSH auf dem Webserver ein und aktivieren HTTP/2 in Plesk über den folgenden Befehl:

plesk bin http2_pref enable

Sollte aus irgend einem Grund HTTP/2 deaktiviert werden müssen, ist der entsprechende Befehl an der Stelle:

plesk bin http2_pref disable

Nun testen wir mit der folgenden URL, ob alles geklappt hat: https://tools.keycdn.com/http2-test – es sollte alles im grünen Bereich sein:

Wenn alles läuft, geht es im nächsten Schritt an ein paar Optimierungen in Plesk:

Plesk: GZip Kompression für NGinx aktivieren

Wir bleiben auf der Kommandozeile und aktivieren über die folgenden Eingaben GZip-Kompression global für alle Domains auf dem Webserver:

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

In die leere Datei fügen wir den folgenden Inhalt ein:

gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_proxied any;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/rss+xml text/javascript image/x-icon image/bmp image/svg+xml;
gzip_vary on;

Danach testen wir die NGinx Konfiguration:

nginx -t

Wenn alls OK ist, starten wir NGinx neu:

service nginx reload

Auch hier gibt es ein Online Tool, mit dem wir die GZip-Kompression testen können: https://www.giftofspeed.com/gzip-test

Nginx ERROR 504 Gateway Timeout

Um diesen Fehler bei längeren Skript-Operationen zu vermeiden, erzeugen wir noch die folgende Datei

pico /etc/nginx/conf.d/timeout.conf

und fügen diesen Inhalt ein:

proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
send_timeout                600;
fastcgi_send_timeout        600;
fastcgi_read_timeout        600;

Somit wartet NGinx 600 Sekunden lang auf Rückmeldung von Apache.

Wie gehabt testen wir wieder die Syntax mit

nginx -t

und starten den Dienst neu mit

service nginx reload

Nginx: Domain-spezifische Optimierungen in Plesk

Die letzte Optimierung machen wir innerhalb der Domain-Settings von Plesk:

In das Feld “Additional nginx settings” fügen wir den folgenden Inhalt ein und bestätigen mit OK:

keepalive_timeout 30;
location ~ \.(css|js|jp(e)?g|gif|png|smf|ico)$ {
  expires 1y;
}
fastcgi_buffer_size 32k;
fastcgi_buffers 256 4k;

Die NGinx-Optimierungen haben folgenden Effekt:

  • Client-Verbindungen haben 30 Sekunden Zeit, bevor NGinx auflegt. Das beseitigt den Overhead ständig neue Connections zu öffnen.
  • Grafik-Resourcen werden 1 Jahr lang browser-seitig gecached. Das minimiert die Menge an Downloads.
  • PHP-Skripte, die im FastCGI-Mode laufen, erhalten zusätzlichen Speicher.

Natürlich gibt es noch viel mehr Möglichkeiten zur NGinx-Optimierung, abhängig von Einsatzzweck und Server-Umgebung. Eine komplette Liste der NGinx Directives gibt es hier.

Viel Spass beim Ausprobieren! .-)