SSL-Installation in Nginx und 301-Weiterleitung von HTTP auf HTTPS
Nginx ist dank seiner Leistung und seines geringen Speicherverbrauchs einer der weltweit beliebtesten Webserver. In dieser Anleitung zeigen wir Ihnen anhand eines vollständigen server-Block-Beispiels, wie Sie ein kostenloses SSL-Zertifikat in Nginx definieren und den gesamten HTTP-Verkehr auf sicheres HTTPS umleiten.
Erforderliche Dateien
Nginx erwartet das Zertifikat und die Zwischenzertifikatskette in einer einzigen kombinierten Datei. Dafür ist fullchain.pem ideal; sie enthält Ihr Zertifikat und die CA-Kette zusammen. Außerdem wird der private Schlüssel private.key benötigt.
fullchain.pem→ Zertifikat + Zwischenzertifikatskette (ssl_certificate)private.key→ privater Schlüssel (ssl_certificate_key)
Falls Sie diese beiden Dateien nicht besitzen, verifizieren Sie Ihre Domain mit unserem kostenlosen SSL-Assistenten und entnehmen Sie dem heruntergeladenen ZIP-Paket die Dateien fullchain.pem und private.key.
Schritt 1 — Laden Sie die Dateien auf den Server
Kopieren Sie die Dateien in ein sicheres Verzeichnis und verschärfen Sie die Berechtigungen. Es ist entscheidend, dass der private Schlüssel nur von root gelesen werden kann:
sudo mkdir -p /etc/nginx/ssl/ihredomain.com
sudo cp fullchain.pem /etc/nginx/ssl/ihredomain.com/
sudo cp private.key /etc/nginx/ssl/ihredomain.com/
sudo chmod 600 /etc/nginx/ssl/ihredomain.com/private.key
Schritt 2 — Konfigurieren Sie den Server-Block
Öffnen Sie Ihre Site-Konfigurationsdatei (z. B. /etc/nginx/sites-available/ihredomain.com). Das folgende Beispiel enthält zwei server-Blöcke: einen, der HTTP auf HTTPS umleitet, und einen, der TLS mit sicheren Einstellungen bereitstellt:
# 1) Alle HTTP-Anfragen dauerhaft auf HTTPS umleiten
server {
listen 80;
listen [::]:80;
server_name ihredomain.com www.ihredomain.com;
return 301 https://$host$request_uri;
}
# 2) HTTPS-Server
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name ihredomain.com www.ihredomain.com;
ssl_certificate /etc/nginx/ssl/ihredomain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/ihredomain.com/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
root /var/www/ihredomain.com;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
Schritt 3 — Testen Sie die Konfiguration und laden Sie sie neu
Um Syntaxfehler abzufangen, testen Sie unbedingt vor dem Neustart von Nginx:
sudo nginx -t
Wenn die Ausgabe syntax is ok und test is successful lautet, laden Sie den Dienst sanft (ohne Ausfall) neu:
sudo systemctl reload nginx
Schritt 4 — Überprüfung
Sie können über die Kommandozeile prüfen, ob die Weiterleitung und das Zertifikat funktionieren:
# Um den Header der 301-Weiterleitung zu sehen
curl -I http://ihredomain.com
# Um zu überprüfen, dass die Zertifikatskette vollständig bereitgestellt wird
echo | openssl s_client -connect ihredomain.com:443 -servername ihredomain.com
Beim ersten Befehl sollten Sie HTTP/1.1 301 Moved Permanently und Location: https://... sehen. Stellen Sie beim zweiten Befehl sicher, dass die Kette lückenlos vom Zertifikat bis zur Zwischenzertifikatskette aufgelistet wird.
Häufige Fehler
- SSL_ERROR_BAD_CERT_DOMAIN: Der
server_namestimmt nicht mit der Domain im Zertifikat überein. Wennwwwenthalten ist, geben Sie beide Namen an. - Fehlende Zwischenzertifikatskette: Verwenden Sie für
ssl_certificatenicht alleincertificate.crt; verwenden Siefullchain.pem. - Berechtigungsfehler: Wenn Nginx den privaten Schlüssel nicht lesen kann, überprüfen Sie die Einstellungen
chmod 600und den Besitzer.
Zusammenfassung
SSL in Nginx besteht lediglich darin, ssl_certificate und ssl_certificate_key zu definieren und einen separaten Block den gesamten HTTP-Verkehr per 301 auf HTTPS umleiten zu lassen. Falls Sie kein Zertifikat haben, holen Sie sich Ihr 90-Tage-Zertifikat mit unserem kostenlosen SSL-Assistenten, entnehmen Sie dem ZIP die Dateien fullchain.pem und private.key und passen Sie den obigen Block an.