Nginx ist ein robuster, schneller, zuverlässiger und dynamischer Open-Source-Webserver, der für die Bereitstellung von stark frequentierten Websites beliebt ist. Darüber hinaus ist es bekannt für seine einfache Konfiguration, hohe Skalierbarkeit und Unterstützung für eine Vielzahl von Protokollen.
Zu den von Nginx unterstützten Protokollen gehört das neue HTTP/2-Protokoll, dessen Hauptvorteil gegenüber seinem Vorgänger HTTP 1.1 ist die hohe Übertragungsgeschwindigkeit, die für inhaltsreiche Websites erforderlich ist.
In diesem Leitfaden werden wir uns mit der Installation und Einrichtung eines sicheren Nginx-Servers mit HTTP/2-Unterstützung befassen:
Voraussetzungen
Lassen Sie uns zunächst die Flugkontrolle durchgehen und nachsehen, ob wir Folgendes haben
- Eine Serverinstanz von Ubuntu 18.04 LTS
- Nginx Version 1.9.5 oder höher (Um die Version von Nginx zu überprüfen, führen Sie
nginx -v
aus ), lesen Sie Nginx unter Ubuntu 18.04 installieren. - OpenSSL Version 1.0.2 oder höher (Überprüfen Sie die Version mit der openssl-Version)
- Ein normaler Nicht-Root-Benutzer mit sudo-Berechtigungen
- Ein vollständig qualifizierter Domänenname (FQDN) In diesem Fall verwenden wir
crazytechgeek.info
bei GoDaddy gekauft.Der A-Eintrag des Domainnamens sollte auf die IP-Adresse des Servers verweisen. crazytechgeek.info wurde auf 216.200.116.207 verwiesen.
- Ein SSL-Zertifikat (entweder ein selbstsigniertes Zertifikat oder eines von Let’s encrypt SSL. Ebenso können Sie eines von einem anderen Anbieter erwerben.
Schritt 1 – Aktivieren der HTTP /2.0-Unterstützung
Zunächst wird davon ausgegangen, dass Sie den Nginx-Serverblock unter
konfiguriert haben/etc/nginx/sites-available/your_domain
In unserem Fall ist der Serverblock /etc/nginx/sites-available/crazytechgeek.info
.
Öffnen Sie mit Ihrem bevorzugten Texteditor die Serverblockdatei und suchen Sie die Datei listen
Direktive wie gezeigt
Die erste Anweisung gibt IPv6-Verbindungen an, während die zweite für IPv4-Verbindungen bestimmt ist
Jetzt werden wir jede Direktive so ändern, dass sie ein http2
enthält Flagge wie gezeigt
Dadurch wird Nginx angewiesen, HTTP/2 auf unterstützten Browsern zu verwenden
Speichern Sie die Konfigurationsdatei und beenden Sie Ihren Editor.
Als nächstes öffnen Sie /etc/nginx/sites-available/default
Datei und nehmen Sie die gleichen Änderungen vor
Speichern und beenden Sie den Texteditor.
Um sicherzustellen, dass keine der Nginx-Dateien Syntaxfehler enthält, führen Sie den folgenden Befehl aus
$ sudo nginx -t
Ausgabe
Schritt 2 – Alte und unsichere Chiffren löschen
Damit HTTP/2 wie erwartet funktioniert, müssen wir vermeiden, alte und unsichere Chiffren zu verwenden, die auf der HTTP/2-Blacklist stehen. Cipher Suites sind kryptografische Algorithmen, die vorgeben, wie der Datenverkehr zu verschlüsseln ist.
Wenn certbot verwendet wurde, um die Zertifikate zu erhalten, dann die Chiffren im Pfad /etc/letsencrypt/options-ssl-nginx.conf
sind für HTTP/2 nicht sicher genug. Die Änderung dieser Datei führt jedoch nur zu Fehlern und verhindert, dass certbot Updates anwendet. Das bedeutet, dass wir unsere Liste der Chiffren angeben und Nginx anweisen müssen, die Datei zu ignorieren
Öffnen Sie die Konfigurationsdatei für den Domänenserverblock Ihres Nginx
$ vim /etc/nginx/sites-available/crazytechgeek.info
Kommentieren Sie diese Zeile
# include /etc/letsencrypt/options-ssl-nginx.conf;
Hängen Sie unterhalb dieser Zeile die folgende Zeile an, um die zulässigen Chiffren zu definieren
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Speichern Sie die Datei und beenden Sie den Texteditor
Wenn ein selbst zugewiesenes Zertifikat oder ein Drittanbieterzertifikat verwendet wurde, öffnen Sie die Datei
/etc/nginx/snippets/ssl-params.conf
$ sudo vim /etc/nginx/snippets/ssl-params.conf
Suchen Sie die Zeile wie unten gezeigt
...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...
Ändern Sie die Datei entsprechend wie unten gezeigt
...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Speichern und beenden Sie abschließend die Konfigurationsdatei
Suchen Sie erneut nach Nginx-Konfigurationsfehlern
$ sudo nginx -t
Wenn alles gut gelaufen ist, sollten Sie die unten gezeigte Ausgabe sehen, wie zuvor gezeigt
Starten Sie Nginx neu
$ sudo systemctl reload nginx
Im nächsten Schritt testen wir, ob unser Server HTTP/2-Seiten bedienen kann
Schritt 3 – Testen, ob HTTP/2 aktiviert ist
Lassen Sie uns nun testen, ob HTTP auf unserem Nginx-Webserver ausgeführt wird und aktiviert ist
Führen Sie in Ihrem Terminal den folgenden Befehl aus
curl -I -L https://your_domain
In unserem Fall soll es sein
curl -I -L https://crazytechgeek.info
Ausgabe
Alternativ können Sie HTTP/2 verifizieren, indem Sie die Google-Entwicklertools öffnen, indem Sie auf
klickenCtrl + Shift + I
Klicken Sie anschließend auf Network
Tab.
Im Protocol
Achten Sie darauf, die Bezeichnung h2
zu finden
Schritt 4 – HTTP Strict Transport Security bereitstellen
Obwohl wir sehr genau wissen, dass unser Server HTTP-Anforderungen an HTTPS umleiten kann, möchten wir HSTS HTTP Strict Transport Security aktivieren, um solche Umleitungen zu eliminieren. Sollte ein Browser zufällig auf einen HSTS-Header stoßen, versucht er für eine gewisse Zeit nicht erneut, sich mit dem Server zu verbinden. Die IT tauscht Daten nur über das sichere und verschlüsselte HTTPS-Protokoll aus.
Öffnen Sie dazu die Nginx-Konfigurationsdatei
$ vim /etc/nginx/nginx.conf
Fügen Sie die folgende Zeile an
add_header Strict-Transport-Security "max-age=15768000" always;
max-age
wird in Sekunden eingestellt
Wenn Ihre Website Subdomains hat und Sie HSTS auf alle anwenden möchten, hängen Sie includeSubDomains
an Flag am Ende der Zeile
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Speichern und beenden Sie die Konfigurationsdatei.
Überprüfen Sie wie immer, ob Fehler vorliegen
$ sudo nginx -t
Starten Sie schließlich Nginx neu
$ sudo systemctl restart nginx
Schlussfolgerung
An diesem Punkt stellt Ihr Nginx-Server jetzt HTTP/2-Seiten bereit.
Sie können auch https://tools.keycdn.com/http2-test
besuchen um den HTTP/2-Status Ihrer Website wie gezeigt zu testen
Alternativ können Sie auch diese Seite besuchen
https://http2.pro/
Verwenden Sie für detailliertere Ergebnisse
https://www.ssllabs.com/ssltest/