Noch kürzlich habe ich mich gefragt, warum nicht viel mehr Seiten die Vorteile von http2 nutzen und neben dem etablierten http/1.1 auch die neuere Version http2 aktivieren. Beim Versuch meinen Webserver umzustellen wurde diese Frage klar und deutlich beantwortet.

Vorgeschichte

Um eine gute Abschirmung der diversen Webseiten auf meinem Server zu erreichen, habe ich entschieden, jede Seite unter einem eigenen Nutzer und eigener Gruppe auszuführen. Dafür habe ich das Modul mpm_itk verwendet, das dieses Vorhaben erheblich vereinfacht. Das Modul ist jedoch abhängig vom Multi-Processing-Modul (MPM) mpm_prefork. Wie sich anschließend herausgestellt hat, ist aber das http2-Modul explizit nicht mit mpm_prefork kompatibel. Und verabschiedet sich still und heimlich mit einem Eintrag im Error-Log.

Also musste eine Alternative her und das ist mpm_event. Der Haken ist jedoch, dieses ist wiederum nicht mit dem Standard-php-Modul mod_php zu verwenden, sondern nur mit der php_fpm Implementierung. Also musste auch das umgestellt werden.

Auf den Vorteil von mpm_itk muss nicht verzichtet werden. Wie man das gleiche mit mpm_event umsetzt, habe ich hier beschrieben.

Checkliste

Bevor die Umstellung auf http2 so reibungslos ablaufen kann, wie in allen How-Tos versprochen wird, muss bereits mpm_event zusammen mit php-fpm verwendet werden. Wie das eingerichtet werden kann, kann hier nachgelesen werden.

Außerdem sollte Apache mindestens in der Version 2.4.26 ausgeführt werden. Das hat den Grund, dass davor die http2-Features als experimentell aufgeführt sind. Das heißt in diesem Fall nicht, dass die Installation dadurch instabil laufen sollte, sondern sagt aus, dass sich die Schnittstellen unter Umständen noch ändern könnten.

Apache2 unterstützt http2 sowohl als gesicherte Verbindung (https) als auch als Klartext (http). Allerdings erlauben die meisten Browser http2 ausschließlich über eine gesicherte Verbindung. Ein SSL-Zertifikat sollte also z.B. von Lets Encrypt bezogen und aktiviert werden.

Aktivieren von http2

Als erstes muss das http2 Modul aktiviert werden. Ist die Apache2 Version auf aktuellen Stand handelt es sich nur um einen Befehl:

a2enmod http2

Jetzt können mit der Protocols Direktive global oder pro vHost die zu verwendeten Protokolle angegeben werden. Dazu in der entsprechenden Konfigurationsdatei z.B.

/etc/apache2/apache2.conf

folgenden Eintrag hinterlegen:

Protocols h2 h2c http/1.1

Das bewirkt, dass http2 aktiviert und bevorzugt wird. Die Reihenfolge geht dabei von links nach rechts. Will man ein Protokoll, z.B. http2 als Klartext (h2c), deaktivieren, so entfernt man es einfach aus der Liste.

Weiterlesen