Wie man HTTP zu HTTPS auf Linux mit Nginx umleitet (Vollständiger Leitfaden)
Die Sicherung Ihrer Website mit HTTPS ist nicht mehr optional — sie ist eine grundlegende Anforderung zum Schutz von Benutzerdaten, zur Aufrechterhaltung von Vertrauen und zum Erreichen starker SEO-Rankings. Suchmaschinen wie Google bestrafen unverschlüsselte HTTP-Websites aktiv, während moderne Browser sie als „Nicht sicher” kennzeichnen. Die Umleitung des gesamten HTTP-Verkehrs zu HTTPS stellt sicher, dass jeder Besucher automatisch die verschlüsselte Version Ihrer Website erreicht, ohne manuelle Eingriffe.
Dieser umfassende Leitfaden führt Sie durch den gesamten Prozess: Verständnis des Unterschieds zwischen HTTP und HTTPS, Installation eines kostenlosen SSL-Zertifikats über Let’s Encrypt, Konfiguration einer permanenten 301-Umleitung in Nginx und Überprüfung, dass alles auf Ihrem Linux-Server korrekt funktioniert.
Inhaltsverzeichnis
- HTTP vs. HTTPS: Was ist der Unterschied?
- Voraussetzungen
- Schritt 1: Installieren Sie ein SSL-Zertifikat mit Let’s Encrypt
- Schritt 2: Konfigurieren Sie Nginx, um HTTP zu HTTPS umzuleiten
- Schritt 3: Testen Sie Ihre Nginx-Konfiguration
- Schritt 4: Laden Sie Nginx neu, um Änderungen anzuwenden
- Schritt 5: Überprüfen Sie, ob die Umleitung funktioniert
- Häufige Probleme und Fehlerbehebung
- Fazit
1. HTTP vs. HTTPS: Was ist der Unterschied? {#http-vs-https}
Bevor Sie in die Konfiguration einsteigen, ist es wichtig zu verstehen, warum diese Umleitung wichtig ist.
HTTP (Hypertext Transfer Protocol)
HTTP ist das grundlegende Protokoll, das zum Übertragen von Daten zwischen einem Webbrowser und einem Server verwendet wird. Es überträgt jedoch alle Daten in Klartext, was bedeutet, dass alle Informationen — Anmeldedaten, Zahlungsdetails, persönliche Daten — von Angreifern durch einen Man-in-the-Middle-Angriff (MITM) abgefangen werden können. HTTP bietet keine Verschlüsselung, Authentifizierung oder Garantien zur Datenintegrität.
HTTPS (HTTP Secure)
HTTPS ist die sichere Erweiterung von HTTP. Es umhüllt das Standard-HTTP-Protokoll mit SSL/TLS-Verschlüsselung und erstellt einen verschlüsselten Tunnel zwischen Client und Server. Dies gewährleistet:
- Vertraulichkeit — Daten können von Dritten während der Übertragung nicht gelesen werden.
- Integrität — Daten können während der Übertragung nicht manipuliert werden.
- Authentifizierung — Benutzer können überprüfen, dass sie mit dem legitimen Server kommunizieren.
- SEO-Vorteil — Google verwendet HTTPS als Ranking-Signal und gibt sicheren Websites einen messbaren Vorteil.
- Browser-Vertrauen — Chrome, Firefox und Edge zeigen ein Schlosssymbol für HTTPS-Websites und eine Warnung „Nicht sicher” für HTTP-Websites an.
Das Fazit: Der Betrieb einer Website ohne HTTPS in der heutigen Umgebung ist ein ernstes Sicherheits- und Geschäftsrisiko.
2. Voraussetzungen {#prerequisites}
Bevor Sie diesem Leitfaden folgen, stellen Sie sicher, dass Sie Folgendes eingerichtet haben:
- Ein Linux-Server (Ubuntu 20.04/22.04, Debian 11/12 oder ähnlich) mit Nginx
- Ein registrierter Domainname, der auf die IP-Adresse Ihres Servers verweist
- Root- oder
sudoZugriff auf Ihren Server - Grundlegende Vertrautheit mit der Linux-Befehlszeile
Wenn Sie nach einer zuverlässigen Serverumgebung zum Hosten Ihrer Website suchen, bietet VPS Hosting von AlexHost vollständig verwaltete und nicht verwaltete Linux VPS-Pläne, die für Webanwendungen optimiert sind, mit SSD-Speicher und hochverfügbarem Netzwerk.
Sie benötigen auch ein gültiges SSL-Zertifikat. Dieser Leitfaden verwendet das kostenlose Let’s Encrypt Zertifikat über Certbot. Wenn Sie ein Extended Validation (EV) oder Organization Validated (OV) Zertifikat für geschäftliche Zwecke benötigen, erwägen Sie die Erkundung von SSL-Zertifikaten von AlexHost.
3. Schritt 1: Installieren Sie ein SSL-Zertifikat mit Let’s Encrypt {#install-ssl}
Let’s Encrypt ist eine kostenlose, automatisierte und offene Zertifizierungsstelle. Certbot ist der offizielle Client, der den Prozess der Beschaffung und Erneuerung von SSL/TLS-Zertifikaten von Let’s Encrypt und der Konfiguration Ihres Webservers automatisiert.
Installieren Sie Certbot und das Nginx-Plugin
Aktualisieren Sie Ihren Paketindex und installieren Sie Certbot zusammen mit dem Nginx-Plugin:
sudo apt update
sudo apt install certbot python3-certbot-nginx -yBeschaffen und installieren Sie Ihr SSL-Zertifikat
Führen Sie Certbot mit dem --nginx Flag aus, um automatisch ein Zertifikat zu beschaffen und Nginx für die Verwendung zu konfigurieren:
sudo certbot --nginx -d example.com -d www.example.comErsetzen Sie example.com durch Ihren tatsächlichen Domainnamen. Certbot wird:
- Domainbesitz über eine ACME-Herausforderung überprüfen
- Ein signiertes Zertifikat von Let’s Encrypt beschaffen
- Ihre Nginx-Konfiguration automatisch ändern, um HTTPS auf Port 443 zu aktivieren
- Optional automatische HTTP-zu-HTTPS-Umleitung einrichten (Sie können diesen Schritt in Certbot überspringen und ihn wie unten gezeigt manuell konfigurieren, um volle Kontrolle zu haben)
Aktivieren Sie die automatische Zertifikatverlängerung
Let’s Encrypt-Zertifikate verfallen alle 90 Tage. Certbot installiert einen systemd-Timer oder Cron-Job, um Verlängerungen automatisch zu handhaben. Überprüfen Sie, ob er aktiv ist:
sudo systemctl status certbot.timerSie können auch einen Trockentest für die Verlängerung durchführen:
sudo certbot renew --dry-run4. Schritt 2: Konfigurieren Sie Nginx, um HTTP zu HTTPS umzuleiten {#configure-nginx}
Mit Ihrem installierten SSL-Zertifikat müssen Sie nun Nginx konfigurieren, um den gesamten HTTP-Verkehr (Port 80) dauerhaft zu HTTPS (Port 443) umzuleiten. Dies geschieht mithilfe einer 301 Moved Permanently Umleitung, die der richtige Umleitungstyp für SEO ist — sie überträgt Link-Equity auf die HTTPS-Version Ihrer Seiten.
Öffnen Sie Ihre Nginx Server Block-Konfiguration
Nginx-Standortkonfigurationen werden normalerweise in /etc/nginx/sites-available/ gespeichert. Öffnen Sie die Konfigurationsdatei für Ihre Domain:
sudo nano /etc/nginx/sites-available/example.comKonfigurieren Sie den HTTP-zu-HTTPS-Umleitungsblock
Ihre Konfigurationsdatei enthält einen oder mehrere server Blöcke. Suchen Sie den Block, der auf Port 80 (HTTP) lauscht, und ersetzen oder aktualisieren Sie ihn mit der folgenden Umleitungsregel:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
# Permanently redirect all HTTP requests to HTTPS
return 301 https://$host$request_uri;
}Ihr HTTPS-Server-Block (Port 443), den Certbot wahrscheinlich automatisch konfiguriert hat, sollte ähnlich wie folgt aussehen:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/example.com/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}> Warum return 301 statt rewrite verwenden?
> Die return 301 Direktive ist schneller und effizienter als eine rewrite Regel. Sie gibt sofort die Umleitungsantwort zurück, ohne dass Nginx zusätzliche Location-Blöcke verarbeiten muss, was den Server-Overhead reduziert und die Antwortzeit verbessert.
Verständnis der Umleitungsdirektive
| Komponente | Erklärung |
|---|---|
listen 80 | Nginx lauscht auf eingehende Verbindungen auf HTTP-Port 80 |
listen [::]:80 | Aktiviert IPv6-Unterstützung auf Port 80 |
server_name | Definiert, auf welche Domainnamen dieser Block angewendet wird |
return 301 | Gibt eine permanente Umleitung aus (am besten für SEO) |
https://$host | Behält den ursprünglichen Hostnamen in der Umleitung bei |
$request_uri | Behält den vollständigen ursprünglichen URI-Pfad und die Abfragezeichenfolge bei |
5. Schritt 3: Testen Sie Ihre Nginx-Konfiguration {#test-nginx}
Laden Sie Nginx niemals neu oder starten Sie es neu, ohne Ihre Konfiguration vorher zu testen. Ein Syntaxfehler in Ihrer Konfigurationsdatei führt dazu, dass Nginx nicht startet und Ihre Website offline geht.
Führen Sie den integrierten Nginx-Konfigurationstest aus:
sudo nginx -tEin erfolgreicher Test erzeugt die folgende Ausgabe:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulWenn Sie Fehler sehen, überprüfen Sie die Ausgabe sorgfältig. Nginx gibt die Datei und Zeilennummer an, in der das Problem erkannt wurde. Häufige Probleme sind:
- Fehlende Semikola am Ende von Direktiven
- Nicht geschlossene geschweifte Klammern
{} - Falsche Dateipfade für SSL-Zertifikate
- Doppelte
server_nameEinträge
Beheben Sie alle gemeldeten Fehler, bevor Sie fortfahren.
6. Schritt 4: Laden Sie Nginx neu, um Änderungen anzuwenden {#reload-nginx}
Sobald der Konfigurationstest erfolgreich ist, laden Sie Nginx neu, um Ihre Änderungen anzuwenden. Die Verwendung von reload statt restart wird bevorzugt, da die neue Konfiguration elegant angewendet wird, ohne aktive Verbindungen zu unterbrechen:
sudo systemctl reload nginxUm zu bestätigen, dass Nginx nach dem Neuladen korrekt ausgeführt wird:
sudo systemctl status nginxSie sollten active (running) in der Ausgabe sehen.
7. Schritt 5: Überprüfen Sie, ob die Umleitung funktioniert {#verify-redirect}
Mit Nginx neu geladen, ist es an der Zeit zu bestätigen, dass die Umleitung korrekt funktioniert.
Methode 1: Browser-Test
- Öffnen Sie Ihren Webbrowser.
- Navigieren Sie zu
http://example.com(mit HTTP, nicht HTTPS). - Beobachten Sie, dass der Browser Sie automatisch zu
https://example.comumleitet. - Bestätigen Sie, dass das Schlosssymbol in der Adressleiste angezeigt wird, was eine gültige SSL-Verbindung anzeigt.
Methode 2: Befehlszeilentest mit curl
Verwenden Sie curl mit dem -I Flag, um nur die HTTP-Antwortheader abzurufen, ohne den Seitenkörper herunterzuladen:
curl -I http://example.comEine korrekt konfigurierte Umleitung erzeugt die folgende Antwort:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Jan 2025 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/
Connection: keep-aliveWichtige Indikatoren zur Überprüfung:
- Statuscode
301 Moved Permanently— Bestätigt, dass eine permanente Umleitung vorhanden ist. Location: https://example.com/— Bestätigt, dass der Verkehr zur HTTPS-Version umgeleitet wird.
Methode 3: Online-Umleitungsprüfer
Sie können auch kostenlose Online-Tools wie redirect-checker.org oder httpstatus.io verwenden, um die vollständige Umleitungskette zu verfolgen und zu bestätigen, dass es keine Umleitungsschleifen oder unnötige Hops gibt.
8. Häufige Probleme und Fehlerbehebung {#troubleshooting}
Umleitungsschleife
Symptom: Browser zeigt Fehler „Zu viele Umleitungen” an.
Ursache: Ihr HTTPS-Server-Block löst auch eine Umleitung zurück zu HTTP aus, was eine Endlosschleife erzeugt.
Lösung: Stellen Sie sicher, dass die return 301 Direktive nur im HTTP-Server-Block (Port 80) vorhanden ist, nicht im HTTPS-Block (Port 443).
Warnungen zu gemischtem Inhalt
Symptom: Das Schlosssymbol zeigt eine Warnung an, auch nachdem die Umleitung funktioniert.
Ursache: Ihre HTML-Seiten verweisen immer noch auf HTTP-Ressourcen (Bilder, Skripte, Stylesheets) mit http:// URLs.
Lösung: Aktualisieren Sie alle internen Ressourcen-URLs, um https:// oder protokollrelative URLs (//) zu verwenden. Verwenden Sie ein Plugin wie Really Simple SSL für WordPress-Websites.
SSL-Zertifikat nicht gefunden
Symptom: Nginx startet nicht mit einem Fehler über fehlende Zertifikatsdateien.
Ursache: Die in ssl_certificate und ssl_certificate_key angegebenen Pfade stimmen
