
Das falsche Einrichten einer Nginx-Weiterleitung frustriert nicht nur Benutzer. Es belastet deine SEO-Rankings, erzeugt Weiterleitungsschleifen, die Browser zum Absturz bringen, und sorgt dafür, dass alte URLs 200er zurückgeben, obwohl dies nicht der Fall sein sollte. Erstelle die Direktiven von Anfang an richtig.
Was ist eine Nginx-Weiterleitung?
Eine Nginx-Weiterleitung ist eine serverseitige Konfiguration, die Besucher und Suchmaschinen von einer URL zu einer anderen weiterleitet. Nginx wertet eingehende Anfragen anhand von Serverblöcken und Standortblöcken aus und entscheidet dann, ob Inhalte bereitgestellt, per Proxy weitergeleitet oder an ein neues Ziel weitergeleitet werden.
301 vs 302: Welche sollte man verwenden?
301 ist dauerhaft. Verwende es, wenn eine URL für immer verschoben wurde und du möchtest, dass Suchmaschinen Ranking-Signale an den neuen Standort übertragen. 302 ist vorübergehend. Verwende es für Wartungsfenster, A/B-Tests oder Situationen, in denen die ursprüngliche URL wiederhergestellt wird. Browser speichern 301-Fehler konsequent im Cache, also verwende sie nicht für Zwecke, die du rückgängig machen könntest.
Voraussetzungen und Dateistandorte
Du benötigst Root- oder Sudo-Zugriff, um Nginx-Konfigurationsdateien zu bearbeiten. Die Hauptkonfiguration befindet sich unter /etc/nginx/nginx.conf. Seitenspezifische Konfigurationen gehören nach /etc/nginx/sites-available/, wobei Symlinks in /etc/nginx/sites-enabled/ verwendet werden, um sie zu aktivieren. Erstelle vor der Bearbeitung immer Backups:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bakSo konfigurierst du Nginx-Weiterleitungen
Nginx bietet drei Hauptdirektiven für Weiterleitungen: return, rewrite und try_files. Jede hat einen spezifischen Anwendungsfall.
Verwendung der return-Direktive
Die return-Direktive ist die effizienteste Option. Die Verarbeitung wird sofort gestoppt und der Statuscode und die URL an den Client gesendet. Syntax:
return [status_code] [URL];Beispiel: Den gesamten Datenverkehr von einer alten Domain auf eine neue umleiten:
server { listen 80; server_name old-domain.com; return 301 https://new-domain.com$request_uri; }Die Variable $request_uri behält den Pfad und die Abfragezeichenfolge bei, sodass /blog/post zu https://new-domain.com/blog/post wird.
Verwendung der rewrite-Direktive
Die rewrite-Direktive verwendet Regex, um URLs zuzuordnen und zu transformieren. Sie ist flexibler als return, aber langsamer und schwieriger zu debuggen:
rewrite ^/old-path(.*)$ /new-path$1 permanent;Das permanent-Flag macht es zu einem 301. Verwende redirect für 302. Wenn du keinen Regex-Abgleich benötigst, verwende stattdessen return. Die rewrite-Regeln werden nacheinander ausgewertet und können mehrere Umschreibungen pro Anfrage auslösen.
Verwendung von try_files für Fallback-Weiterleitungen
try_files sucht nach Dateien in der richtigen Reihenfolge und greift auf einen angegebenen Speicherort zurück, wenn keine vorhanden sind:
location / { try_files $uri $uri/ /index.php?$query_string; }Dabei handelt es sich nicht um eine herkömmliche Weiterleitung, sondern um Fälle, in denen saubere URLs auf einen Front-Controller zurückgreifen müssen.
Häufige Anwendungsfälle für Nginx-Weiterleitungen
HTTP zu HTTPS umleiten
Das Standardmuster, um HTTPS zu erzwingen:
server { listen 80; server_name example.com www.example.com; return 301 https://example.com$request_uri; }www auf Non-www umleiten
Kanonische Weiterleitung zum Entfernen der www-Subdomain:
server { listen 443 ssl; server_name www.example.com; return 301 https://example.com$request_uri; }Eine bestimmte URL oder einen Pfad umleiten
Einzelne URL-Weiterleitung mit einem Standortblock:
location = /old-page { return 301 /new-page; }Der =-Modifikator sorgt für eine exakte Übereinstimmung, die schneller ist als die Präfix- oder Regex-Übereinstimmung.
Eine gesamte Domain umleiten
Catch-all-Redirect für Domain-Migrationen:
server { listen 80; server_name old-site.com; return 301 https://new-site.com$request_uri; }Best Practices für Nginx-Weiterleitungen
Vermeidung von Weiterleitungsketten und -schleifen
Bei einer Weiterleitungskette handelt es sich um eine Weiterleitung von URL A zu B und diese wiederum zu C. Jeder Absprung erhöht die Latenz und kann Crawler verwirren. Beschränke die Ketten auf maximal eine Weiterleitung. Eine Weiterleitungsschleife liegt vor, wenn A zu B umleitet und B zurück zu A, wodurch die Anfrage vollständig abgebrochen wird. Teste immer mit curl:
curl -I http://example.comTeste deine Konfiguration
Überprüfe die Konfiguration, bevor du Nginx neu lädst:
sudo nginx -tWenn es erfolgreich ist, lade es neu, ohne die Verbindungen zu trennen:
sudo systemctl reload nginxÜberspringe niemals die Validierung. Ein Syntaxfehler in der Konfigurationsdatei bringt den gesamten Server zum Absturz.
FAQ: Nginx-Weiterleitung
return ist schneller, da die Verarbeitung sofort gestoppt wird. rewrite durchläuft den gesamten Nginx-Verarbeitungszyklus und unterstützt Regex-Transformationen. Verwende return für einfache Weiterleitungen und rewrite nur, wenn du eine Regex-basierte URL-Manipulation benötigst.
Füge einen Serverblock hinzu, der Port 80 überwacht: return 301 https://yourdomain.com$request_uri; dies sendet den gesamten HTTP-Traffic dauerhaft an das HTTPS-Pendant.
Erstelle einen Server-Block für www.yourdomain.com und verwende: return 301 https://yourdomain.com$request_uri; Stelle sicher, dass dein SSL-Zertifikat sowohl die www- als auch die non-www-Version abdeckt.
Führe sudo nginx -t aus, um die Syntax zu überprüfen. Verwende dann curl -IL https://yourdomain.com/path, um die vollständige Weiterleitungskette zu verfolgen, bevor du den Live-Server neu lädst.