15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
01.11.2024

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

  1. HTTP vs. HTTPS: Was ist der Unterschied?
  2. Voraussetzungen
  3. Schritt 1: Installieren Sie ein SSL-Zertifikat mit Let’s Encrypt
  4. Schritt 2: Konfigurieren Sie Nginx, um HTTP zu HTTPS umzuleiten
  5. Schritt 3: Testen Sie Ihre Nginx-Konfiguration
  6. Schritt 4: Laden Sie Nginx neu, um Änderungen anzuwenden
  7. Schritt 5: Überprüfen Sie, ob die Umleitung funktioniert
  8. Häufige Probleme und Fehlerbehebung
  9. 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 sudo Zugriff 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 -y

Beschaffen 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.com

Ersetzen Sie example.com durch Ihren tatsächlichen Domainnamen. Certbot wird:

  1. Domainbesitz über eine ACME-Herausforderung überprüfen
  2. Ein signiertes Zertifikat von Let’s Encrypt beschaffen
  3. Ihre Nginx-Konfiguration automatisch ändern, um HTTPS auf Port 443 zu aktivieren
  4. 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.timer

Sie können auch einen Trockentest für die Verlängerung durchführen:

sudo certbot renew --dry-run

4. 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.com

Konfigurieren 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

KomponenteErklärung
listen 80Nginx lauscht auf eingehende Verbindungen auf HTTP-Port 80
listen [::]:80Aktiviert IPv6-Unterstützung auf Port 80
server_nameDefiniert, auf welche Domainnamen dieser Block angewendet wird
return 301Gibt eine permanente Umleitung aus (am besten für SEO)
https://$hostBehält den ursprünglichen Hostnamen in der Umleitung bei
$request_uriBehä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 -t

Ein 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 successful

Wenn 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_name Einträ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 nginx

Um zu bestätigen, dass Nginx nach dem Neuladen korrekt ausgeführt wird:

sudo systemctl status nginx

Sie 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

  1. Öffnen Sie Ihren Webbrowser.
  2. Navigieren Sie zu http://example.com (mit HTTP, nicht HTTPS).
  3. Beobachten Sie, dass der Browser Sie automatisch zu https://example.com umleitet.
  4. 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.com

Eine 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-alive

Wichtige 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

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen