Hypertext Transfer Protocol Version 2 (HTTP/2 ) ist die neueste Version des HTTP-Protokolls, das 2015 als IETF-Standard in RFC 7540 veröffentlicht wurde. Der Fokus des Protokolls liegt auf der Leistung; insbesondere die vom Endbenutzer wahrgenommene Latenz, Netzwerk- und Serverressourcennutzung. Ein Hauptziel besteht darin, die Verwendung einer einzelnen Verbindung von Browsern zu einer Website zu ermöglichen. Das Protokoll ist abwärtskompatibel, daher sind HTTP-Methoden, Statuscodes und Semantik dieselben wie bei früheren Versionen des Protokolls. Apache unterstützt HTTP/2 seit Version 2.4.17. In diesem Tutorial gehe ich davon aus, dass Sie bereits eine funktionierende TLS-Konfiguration haben und dass Sie die erforderliche Apache-Version auf Ihrer bevorzugten Linux-Distribution installiert haben und dass Sie wissen, wie man Let's Encrypt verwendet, oder Sie wissen, wie man es tut ein selbstsigniertes Zertifikat ausstellen.
Dieses Tutorial wurde auf Debian 10 getestet , Debian 9, Ubuntu 20.04 LTS, und Ubuntu 18.04 LTS.
Voraussetzungen
Um HTTP/2 in Apache zu aktivieren, müssen Sie die folgenden Anforderungen erfüllen:
- Zunächst müssen Sie HTTPS auf Ihrem Server aktivieren. Alle gängigen Browser erlauben die Verwendung von HTTP/2 nur über HTTPS. Auch TLS Protokollversion>=1.2 mit modernen Verschlüsselungssammlungen ist erforderlich.
- Stellen Sie als Nächstes sicher, dass Sie Apache 2.4.17 ausführen oder höher, da HTTP/2 ab dieser Version unterstützt wird.
- Vergewissern Sie sich außerdem, dass Ihr Client/Browser tatsächlich HTTP/2 unterstützt.
Modul mod_php deaktivieren
Bevor wir im nächsten Schritt das Apache MPM-Modul auf mpm_event umstellen können, müssen wir den alten mod_php-Modus deaktivieren und durch den moderneren PHP-FPM-Modus ersetzen. Die Befehle unterscheiden sich für jede Betriebssystemversion, bitte verwenden Sie die, die zu Ihrem installierten System passen.
Ubuntu 20.04 LTS
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
Debian 10
sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi
Ubuntu 18.04 LTS
sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi
Debian 9
sudo apt-get install php7.0-fpm
sudo a2dismod php7.0
sudo a2enconf php7.0-fpm
sudo a2enmod proxy_fcgi
Aktivieren Sie ein Apache MPM, das mit HTTP/2 kompatibel ist
Standardmäßig verwendet Apache das Prefork-MPM. Dieses MPM ist nicht mit HTTP/2 kompatibel, daher müssen wir es durch das modernere Modul mpm_event ersetzen.
Zuerst deaktivieren wir das Modul mpm_prefork:
sudo a2dismod mpm_prefork
Dann aktivieren wir das Modul mpm_event:
sudo a2enmod mpm_event
HTTP/2-Unterstützung in Apache aktivieren
Damit HTTP/2 auf Apache funktioniert, müssen Sie SSL- und HTTP/2-Module aktivieren und laden. Dazu können Sie Folgendes in Ihrem Terminal ausführen:
sudo a2enmod ssl
und dann
sudo a2enmod http2
Um diese neuen Module zu aktivieren, müssen Sie Folgendes ausführen:
sudo systemctl restart apache2
Nachdem Sie die erforderlichen Apache-Module aktiviert und geladen haben, navigieren Sie zu Ihrem Apache-Konfigurationsverzeichnis und bearbeiten Sie die Apache-Konfiguration.
Um HTTP/2 auf Ihrem Apache-Webserver zu aktivieren, fügen Sie eines der folgenden Elemente zu Ihrer globalen Apache-Konfiguration oder innerhalb eines bestimmten virtuellen Hosts hinzu.
Protocols h2 http/1.1
Hier ist die minimale virtuelle Serverkonfiguration, die verwendet werden kann, um HTTP/2 in einem virtuellen Host zu aktivieren:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public_html/example.com
SSLEngine on
SSLCertificateKeyFile /path/to/private.pem
SSLCertificateFile /path/to/cert.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Protocols h2 http/1.1
</VirtualHost>
Um zu prüfen, ob Ihr Server HTTP/2 unterstützt, können Sie Ihre Browser-Entwicklungstools verwenden. Unten sind Screenshots von Google Chrome- und Apple Safari-Browsern zu sehen, die HTTP/2 in Aktion auf https://example.com zeigen Domäne.
Chrom
Safari
Links
- RFC 7540
- HTTP/2