nginx mit H2/ALPN auf Debian Jessie

Update vom 28. Dezember 2016:
nginx auf Version 1.11.8 aktualisiert
Update vom 25. Januar 2017:
nginx auf Version 1.11.9 aktualisiert
Update vom 6. April 2017:
nginx auf Version 1.11.13 aktualisiert

HTTP/2 ist eine Weiterentwicklung des originalen HTTP-Protokolls von 1999 (RFC). Obgleich der Standard eine Verschlüsselung nicht vorschreibt, ist die Implementation in den am meisten genutzten Browsern HTTP/2 über TLS only. HTTP/2 entstand aus dem von Google entwickelten Protokoll SPDY und konnte bis 31. Mai 2016 auch unter Google Chrome mit NPN (Next Protocol Negotiation) genutzt werden. Seitdem jedoch ausschließlich über ALPN. Die Nutzung des ALPN Protokolls setzt jedoch zwingend OpenSSL 1.0.2 voraus.

Wie im verlinkten Artikel schnell deutlich wird, gibt es derzeit abgesehen von Ubuntu 16.04 LTS keine Distribution die OpenSSL 1.0.2 als stabiles Package beinhaltet.

Um nginx unter Debian Jessie 8.x mit HTTP/2 und ALPN nutzen zu können, müssen wir nginx also selbst kompilieren.

1. Vorbereitung für nginx mit H2 und ALPN

Zunächst brauchen wir den OpenSSL- und nginx-Sourcecode. Diesen laden wir in den Ordner /usr/local/src:

2. OpenSSL-Version

Anschließend wechseln wir in das openssl-Verzeichnis und schauen uns den letzten Release aus dem 1.0.2-Branch von OpenSSL bei GitHub an und checken den letzten Commit aus:

Zum Zeitpuntk des Beitags ist dies OpenSSL 1.0.2k:

3. nginx konfigurieren

Sofern ihr bereits eine stabile nginx-Version installiert habt, solltet ihr diese nun deinstallieren:

Nun wechseln wir in das Verzeichnis /usr/local/src/nginx-1.11.13 und konfigurieren nginx:

Wichtig ist vor allem das SSL- und HTTP2-Modul. Die anderen Module könnt bzw. müsst ihr an die eigenen Bedürfnisse anpassen. Weitere Informationen dazu findet ihr in der nginx Dokumentation.

4. nginx kompilieren und installieren

Nun kompilieren wir nginx mittels

Nachdem nginx kompiliert wurde (kann einige Zeit dauern), installieren wir nginx nun und erstellen das cache-Verzeichnis (sofern nicht vorhanden):

5. Fertig

Nun solltet ihr mit folgendem Kommando die aktuelle nginx-Version prüfen und im Idealfall sollte dort Version 1.11.13 mit eurer Konfiguration angezeigt werden:

Ausgabe:

Nun können wir nginx wieder starten (wenn bereits konfiguriert):

Anschließend sollte beim Aufruf einer entsprechenden Website folgendes in den DevTools (F12) erscheinen:
nginx mit HTTP/2 und ALPN

Unter Webserver sollte weiterhin nginx 1.11.13 auftauchen (alter Screenshot, daher nginx 1.11.7):
nginx mit HTTP/2 und ALPN