Nginx mit HTTP/2

Seit dem 22. September unterstützt nginx das neue Protokoll HTTP/2. Gleich am nächsten Tag habe ich zum Testen meinen Web-Server umgestellt. Hier ein kurzer Bericht:

Ich spare mir, die Vorzüge von HTTP/2 aufzuführen und zeige die wichtigsten Messergebnisse meiner Startseite im Vergleich:

http2-http1

HTTP/2 vs. HTTP/1 meiner Startseite im Vergleich

Wie erhofft, haben sich dank HTTP/2 die Ladezeiten verbessert. Sehr überrascht bin ich von der deutlichen Verminderung der CPU Busy Time. Darüber dürften sich auch die Hoster ganz besonders freuen.

Voraussetzungen für die Umstellung auf HTTP/2

1) Eigener Server

Ganz zuvorderst braucht man einen eigenen (v)Server mit Root-Rechten. Wer das nicht hat, muss so lange warten, bis sein Hoster endlich umgestellt hat.

Ich habe einen vServer mit Ubuntu 15.04 15.10.

2) SSL

SSL wird zwar nicht zwingend in der HTTP/2-Spezifikation vorgegeben, aber aktuelle Browser tun es.

3) OpenSSL

Nginx empfiehlt OpenSSL in der Version 1.0.2 für den vollen Funktionsumfang von HTTP/2. Auf dem aktuellen Ubuntu Server 15.04 ist leider nur OpenSSL 1.0.1f. Nginx schreibt aber, dass man vorübergehend mit der alten Version arbeiten kann. Bei mir läuft HTTP/2 auch mit OpenSSL 1.0.1f.

Die gute Nachricht: Im Upgrade 15.10 – welches am 22. Oktober 2015 raus kommt – ist OpenSSL 1.02d dabei. Am besten bis dahin „Füße still halten“. ;-)

4) Nginx 1.9.5 1.9.6 1.9.7

Erst die aktuelle Mainline-Version 1.9.5 1.9.6 1.9.7 unterstützt HTTP/2. Es ist also notwendig, den Server upzudaten, falls „nur“ die Stable-Version im Einsatz ist.

In meinem Fall war das aufwendig. Denn ich verwende das ngx_pagespeed Modul von Google. Darum musste ich meinen nginx selber kompilieren. Das habe ich nach der Anleitung von Google erledigt. Dazu musste allerdings einiges angepasst werden.

Hier meine angepasste Anleitung für nginx mit HTTP/2 und ngx_pagespeed:

sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
cd
NPS_VERSION=1.9.32.10
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
unzip release-${NPS_VERSION}-beta.zip
cd ngx_pagespeed-release-${NPS_VERSION}-beta/
wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz

Update 27.10.15: Neueste NPS Version

cd
NGINX_VERSION=1.9.7
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
cd nginx-${NGINX_VERSION}/
./configure --add-module=$HOME/ngx_pagespeed-release-${NPS_VERSION}-beta \
--prefix=/usr/local/share/nginx --conf-path=/etc/nginx/nginx.conf \
--with-http_ssl_module \
--with-http_v2_module \
--sbin-path=/usr/local/sbin --error-log-path=/var/log/nginx/error.log
make
sudo make install

Update 17.11.15: Neueste nginx Version

… in fünf Minuten erledigt. ;-D

HTTP/2 aktivieren

Wenn die Vorbereitungen erledigt sind, ist die eigentliche Aktivierung ein Kinderspiel:

  1. In config-Datei des virtuellen Hosts als Root in einem Editor öffnen.
  2. Die Direktive listen mit http2 erweitern:
    server {
        # https
        listen 443 ssl http2;
    ...usw...
  3. Nginx neu laden.

Testen

Zum Überprüfen, ob HTTP/2 läuft, kann man die folgende Erweiterung in seinem Chrome Browser aktivieren:

https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en

Wenn alles gut gegangen ist, sieht man in der Adressleiste von Chrome einen blauen Blitz.

http2-test

Blauer Blitz = Test bestanden

UPDATE – 29.09.15

Eben bin ich darauf aufmerksam gemacht worden, dass meine Seite bei diesem HTTP/2 Check nicht besteht: https://www.h2check.org/#heikomamerow.de

Jetzt wäre es gut zu wissen, wie der Test funktioniert und warum er nicht erfolgreich war… Ich bin gespannt und warte auf Antwort von h2check.

UPDATE – 05.11.15

Von h2check fehlt leider immer noch Rückmeldung. Aber dafür gibt es eine weitere HTTP/2 Check-Seite:  https://tools.keycdn.com/http2-test

Dort verläuft der Test meiner Seite positiv. 
(Danke an Bodo für den Tipp! :-))

 

Viel Spaß und Erfolg beim Umstellen!
:-)

 

 

This entry was posted on by .

Heiko Mamerow

Buddhist, Vater, Freund, Internetseitenbauer, Sportler, Musikliebhaber & Verkehrsteilnehmer ;-)