Nginx Redirects meistern - Fehler vermeiden, sauber konfigurieren

Netzwerkdiagramm zeigt eine fehlerhafte Konfiguration eines nginx redirect. Ein PC fragt DNS ab, sendet HTTP an Reverse Proxy, der die Anfrage nicht weiterleitet.

Geschrieben von

Thilo Arndt

Veröffentlicht am

24. März 2026

Inhaltsverzeichnis

Weiterleitungen in Nginx sind schnell falsch konfiguriert: Ein kleiner Fehler im Statuscode, im Hostnamen oder im Zusammenspiel von return und rewrite reicht aus, damit Browser falsche Ziele merken oder sich Schleifen bilden. Der Begriff nginx redirect steht in der Praxis meistens für genau diese saubere Steuerung von Host-, Pfad- und Protokollwechseln. Ich zeige dir deshalb, wie ich Weiterleitungen in Nginx aufbaue, welche Statuscodes ich wann einsetze und wie du typische Fälle wie HTTPS, Canonical Host und alte Pfade sauber abbildest.

Die wichtigsten Punkte auf einen Blick

  • Für feste Weiterleitungen ist return meist die klarste und robusteste Lösung.
  • rewrite nutze ich vor allem dann, wenn ich mit Mustern oder regulären Ausdrücken arbeiten muss.
  • 301 und 308 setze ich für dauerhafte Umzüge ein, 302 und 307 für temporäre Änderungen.
  • Host-, HTTPS- und Pfad-Redirects gehören idealerweise in getrennte server-Blöcke oder klar abgegrenzte Locations.
  • Redirect-Loops, falsche Ziel-Hosts und Cache-Effekte sind die häufigsten Fehler in der Praxis.

Diagramm zeigt, wie ein Reverse Proxy (z.B. Nginx) Anfragen von Nutzern über das Internet an verschiedene Server weiterleitet.

Was ein Redirect in Nginx technisch auslöst

Ich trenne bei Nginx bewusst zwischen einer sichtbaren Weiterleitung und einer internen Umleitung. Bei einer sichtbaren Weiterleitung bekommt der Browser einen Statuscode wie 301 oder 302 plus einen Location-Header und springt auf die neue Adresse. Bei einer internen Umleitung bleibt die URL im Browser gleich, Nginx verarbeitet den Request aber auf dem Server anders weiter.

Genau deshalb ist nicht jede Regel in Nginx automatisch ein Redirect im klassischen Sinn. return beendet die Verarbeitung sofort und schickt die Antwort an den Client. rewrite verändert dagegen zunächst die URI und kann, je nach Flag, eine neue Locationsuche auslösen. Wenn man diesen Unterschied nicht sauber versteht, baut man schnell Regeln, die funktionieren, aber nicht so, wie man sie später betreiben will.

Für mich ist die wichtigste Faustregel einfach: Wenn der Browser eine neue Adresse sehen soll, muss die Regel das ausdrücklich auslösen. Sobald das klar ist, wird die Konfiguration viel lesbarer und das Risiko für Schleifen sinkt deutlich. Damit ist die technische Basis gelegt, und der nächste Schritt ist die Frage, wo ich eine Weiterleitung in der Praxis am besten platziere.

Die sauberste Lösung für Host- und Pfadwechsel

Für feste Weiterleitungen setze ich fast immer auf einen eigenen server-Block oder auf eine sehr kleine, klar abgegrenzte Location. Nginx entscheidet den passenden Server zunächst über listen und Host; genau deshalb ist es sauberer, einen alten Host direkt auf die neue Zielvariante zu schicken, statt die Logik in einem großen Block zu verstecken. Die offizielle Nginx-Dokumentation macht an dieser Stelle denselben Punkt: Für feste Umzüge ist return der direkte und wartbare Weg.

server {
    listen 80;
    server_name alt-domain.tld;
    return 301 https://neu-domain.tld$request_uri;
}

server {
    listen 443 ssl http2;
    server_name neu-domain.tld;
    # eigentliche Anwendung
}

Ich mag an diesem Muster vor allem zwei Dinge: Erstens ist sofort erkennbar, dass der alte Host keine eigene Anwendungslogik mehr hat. Zweitens bleibt der komplette Pfad mit $request_uri erhalten, also auch vorhandene Query-Parameter. Wenn Nginx die Ziel-URL aus einer lokalen URI erzeugt, spielen außerdem server_name_in_redirect und port_in_redirect hinein. Das ist wichtig, wenn der Location-Header später einen unerwarteten Host oder Port zeigt.

Für reine Pfadwechsel nutze ich das gleiche Prinzip, nur ohne Domainwechsel. Die Regel bleibt kurz, eindeutig und leicht testbar. Sobald das Fundament steht, lohnt sich der Blick auf die Redirect-Typen, die im Alltag wirklich zählen.

Typische Weiterleitungen aus dem Alltag

In Projekten sehe ich immer wieder dieselben drei Fälle: HTTP auf HTTPS, www auf die kanonische Domain und alte Pfade auf neue Inhalte. Ich halte diese Fälle gern getrennt, weil sie unterschiedliche Ziele haben und oft auch unterschiedliche Risiken mitbringen. Ein permanenter Redirect ist nicht automatisch besser, nur weil er „stärker“ wirkt.

Statuscode Wann ich ihn nutze Was der Client daraus macht Worauf ich achte
301 Dauerhafte Weiterleitung von Seiten, Hosts oder Pfaden Die neue Adresse wird langfristig als Ziel verstanden Browser und Caches merken sich das oft sehr hart
302 Temporäre Umleitung, Tests, Kampagnen, Wartung Die ursprüngliche Adresse bleibt die eigentlich gültige Nicht für dauerhafte Umzüge verwenden
307 Temporär, wenn die HTTP-Methode erhalten bleiben soll POST bleibt POST, GET bleibt GET Besonders nützlich bei Formularen oder APIs
308 Dauerhaft, wenn die Methode erhalten bleiben soll Wie 301, aber methodensicherer Sehr sauber für API- oder Formular-Migrationen

HTTP auf HTTPS

Das ist der Klassiker. Ich leite den gesamten Traffic auf Port 80 auf HTTPS um und lasse nur noch einen klaren Zielhost zu. Für Nutzer ist das transparent, für Suchmaschinen ist es nachvollziehbar, und für spätere HSTS-Einführung ist es die richtige Grundlage. Ich würde hier meistens mit 301 arbeiten, außer ich teste gerade noch die Umstellung und will den Browser-Caches nicht sofort eine endgültige Variante geben.

server {
    listen 80;
    server_name beispiel.tld www.beispiel.tld;
    return 301 https://beispiel.tld$request_uri;
}

www auf die kanonische Domain

Hier geht es nicht um Technik, sondern um Konsistenz. Eine kanonische Host-Variante reduziert Duplicate Content, vereinfacht Cookies und macht Logs sowie Monitoring lesbarer. Ich entscheide mich früh für eine Variante und ziehe sie dann konsequent durch alle Weiterleitungen und internen Links.

Wichtig ist nur, dass die Ziel-Domain wirklich eindeutig ist. Wenn du mit $host oder anderen Variablen zu großzügig bist, kannst du unbeabsichtigt die falsche Hostvariante wieder einsammeln. Genau an dieser Stelle entstehen viele Redirect-Loops, obwohl die Syntax auf den ersten Blick harmlos aussieht.

Lesen Sie auch: Nginx Regex Location - Häufige Fehler & Best Practices

Alte Pfade auf neue Inhalte

Bei Relaunches oder Strukturänderungen nutze ich Pfad-Weiterleitungen sehr gezielt. Alte URLs mit dauerhaft hohem Traffic bekommen eine explizite Regel, statt blind auf eine neue Startseite umzuleiten. Das ist besser für Nutzer und deutlich sauberer für Analysen, weil das Ziel semantisch zum Ursprung passt.

location = /alter-artikel {
    return 301 /wissen/neuer-artikel;
}

Wenn ich viele ähnliche Pfade umbiegen muss, gehe ich erst dann zu regulären Ausdrücken über. Damit bin ich bei der eigentlichen Werkzeugwahl angekommen, und genau dort trennt sich in Nginx die elegante Lösung von der unnötig komplizierten.

Wann rewrite sinnvoll ist und wann nicht

rewrite ist kein schlechter Befehl, aber er wird oft überbenutzt. Ich greife darauf zurück, wenn ich eine URI nach einem Muster umformen will, also zum Beispiel bei alten Pfadstrukturen, Sprachpräfixen oder bestimmten Verzeichnisregeln. Für eine einfache feste Weiterleitung ist rewrite dagegen meist die falsche Wahl, weil return kürzer, direkter und leichter zu warten ist.

Kriterium return rewrite
Lesbarkeit Sehr hoch Abhängig von Regex und Flags
Typischer Einsatz Feste Weiterleitungen URI-Umformung, Muster, Sonderfälle
Fehleranfälligkeit Gering Höher, vor allem bei Loops
Performancegefühl Direkt Nur einsetzen, wenn Regex wirklich nötig ist
rewrite ^/blog/(.*)$ /wissen/$1 permanent;

Das Beispiel ist genau dann sinnvoll, wenn alte Blog-URLs strukturell in ein neues Wissensverzeichnis überführt werden. Die Flags sind dabei entscheidend: permanent erzeugt eine 301-Weiterleitung, redirect eine 302-Weiterleitung. last stößt eine neue Locationsuche an, break bleibt in der aktuellen Location. Wenn man das im falschen Kontext einsetzt, landet man schnell in einem Kreislauf. Nginx bricht solche internen Umleitungen nach 10 Durchläufen ab und liefert dann einen 500er Fehler.

Mein praktischer Rat ist deshalb klar: Regex nur dann, wenn sie wirklich Mehrwert bringen. Alles andere gehört in eine einfache, gut lesbare Regel. Damit sind die häufigsten Fehler schon fast automatisch entschärft.

Fehler, die ich in Redirect-Konfigurationen am häufigsten sehe

  • Zu viel Logik in einem Block: Wenn Hostwechsel, HTTPS und Pfadumformung in derselben Stelle vermischt werden, verliert man schnell den Überblick.
  • Falscher Statuscode: 301 für einen kurzen Test ist eine schlechte Idee, weil Browser und Zwischen-Caches die Weiterleitung lange behalten können.
  • Query-Parameter vergessen: Wenn ein Ziel die ursprünglichen Parameter braucht, arbeite ich bewusst mit $request_uri oder einer sauberen Variablenlösung.
  • Redirect-Loops: Ein Ziel, das wieder von derselben Regel getroffen wird, erzeugt Schleifen. Das passiert gern bei ungenauem Host-Matching oder bei schlecht platzierten Regex-Regeln.
  • Automatische Slash-Weiterleitung übersehen: Wenn eine Location mit Slash endet und dahinter ein Proxy oder Upstream hängt, kann Nginx bei einer Anfrage ohne Slash automatisch ein permanentes 301 auf die Slash-Variante senden.
  • Methodenwechsel ignoriert: Für Formulare und APIs ist 307 oder 308 oft die bessere Wahl, weil POST nicht zu GET „umfallen“ soll.

Gerade der Slash-Fall wird oft missverstanden: Er ist nicht automatisch falsch, aber er ist eben auch nicht immer explizit sichtbar konfiguriert. Wenn du solche Effekte kennst, liest du die Konfiguration später deutlich sicherer. Im letzten Schritt prüfe ich deshalb nicht nur die Syntax, sondern auch das tatsächliche Verhalten mit echten Requests.

So prüfe ich eine Weiterleitung in wenigen Minuten

Bevor ich eine Regel produktiv lasse, teste ich sie immer mit einem kurzen, reproduzierbaren Ablauf. Erst prüfe ich die Konfiguration, dann die Antwort des Servers und zuletzt das Verhalten im Browser oder mit einem echten Request. Das spart mir später die unangenehme Suche nach Caches, alten Tabs oder falsch interpretierten Statuscodes.

  1. Konfiguration testen: Ich beginne mit nginx -t, damit Syntaxfehler sofort auffallen.
  2. Status und Ziel prüfen: Mit curl -I sehe ich den Statuscode und den Location-Header direkt.
  3. Temporär vor permanent: Wenn ich mir nicht sicher bin, teste ich erst mit 302 oder 307 und schalte später auf 301 oder 308 um.
  4. Formulare separat prüfen: Bei POST-Requests kontrolliere ich zusätzlich, ob die Methode erhalten bleibt.
nginx -t
curl -I http://beispiel.tld/alter-pfad
curl -I https://beispiel.tld/alter-pfad

Wenn ich eine API oder ein Formular absichere, teste ich nicht nur den Header, sondern auch die Request-Methode. Ein Redirect kann korrekt aussehen und trotzdem für POST-Nutzer falsch sein. Genau diese Mischung aus Header-Check und realem Request liefert mir das Bild, das ich für eine saubere Freigabe brauche. Danach bleibt nur noch die Frage, was sich in der Praxis wirklich als Standard bewährt.

Was sich in der Praxis wirklich bewährt

Meine Standardstrategie ist schlicht: feste Weiterleitungen per return, Regex nur mit einem guten Grund, und dauerhafte Umzüge erst dann, wenn die temporäre Variante sauber getestet ist. Für Hosts und Protokolle trenne ich die Logik konsequent, weil die Konfiguration dadurch weniger fehleranfällig und später schneller nachvollziehbar wird.

  • Ich leite HTTP früh auf HTTPS um und halte den Zielhost konsistent.
  • Ich entscheide mich für eine kanonische Domain und ziehe sie überall durch.
  • Ich nutze 301 oder 308 nur dann, wenn das Ziel wirklich dauerhaft ist.
  • Ich setze 307 oder 302 ein, wenn ich während einer Migration noch Spielraum brauche.
  • Ich prüfe jede Regel auf Loops, Parameterverlust und unerwünschte Slash-Effekte.

Wenn du dich an diese Linien hältst, wird aus einer potenziell fehleranfälligen Redirect-Landschaft eine saubere, gut wartbare Nginx-Konfiguration. Genau das ist am Ende der Punkt, an dem Redirects nicht mehr wie Sonderfälle wirken, sondern wie ein kontrollierter Teil deiner Infrastruktur.

Häufig gestellte Fragen

`return` beendet die Verarbeitung sofort und sendet eine Antwort (z.B. einen Redirect) an den Client. Es ist ideal für feste Weiterleitungen. `rewrite` verändert die URI intern und kann eine neue Locationsuche auslösen, oft unter Verwendung regulärer Ausdrücke für Musteranpassung.

Verwende 301 (Moved Permanently) oder 308 (Permanent Redirect) für dauerhafte Umzüge. Für temporäre Änderungen oder Tests sind 302 (Found) oder 307 (Temporary Redirect) besser geeignet. 307/308 erhalten die HTTP-Methode (z.B. POST) bei der Weiterleitung.

Platziere Host-, HTTPS- und Pfad-Redirects in getrennten `server`-Blöcken oder klar abgegrenzten Locations. Achte auf exakte Host-Matches und vermeide zu generische Regex-Regeln, die sich selbst wieder treffen könnten. Teste jede Regel sorgfältig mit Tools wie `curl -I`.

Ja, in den meisten Fällen ist ein 301 Redirect die beste Wahl, um HTTP-Traffic dauerhaft auf HTTPS umzuleiten. Dies ist gut für SEO und die Sicherheit. Stelle sicher, dass der Zielhost korrekt ist, um Probleme mit doppelten Inhalten zu vermeiden.

Artikel bewerten

Bewertung: 0.00 Stimmenanzahl: 0

Tags:

nginx redirect nginx redirect 301 nginx rewrite regel nginx https redirect nginx canonical host

Beitrag teilen

Thilo Arndt

Thilo Arndt

Mein Name ist Thilo Arndt und ich bringe 10 Jahre Erfahrung in den Bereichen IT-Infrastruktur, Web-Technologien und Sicherheit mit. Mein Interesse an diesen Themen begann bereits in meiner Jugend, als ich die Funktionsweise von Computern und Netzwerken erkunden wollte. Diese Neugier hat sich zu einer Leidenschaft entwickelt, die mich dazu motiviert, komplexe technische Konzepte verständlich zu machen und aktuelle Trends in der Branche zu verfolgen. In meinen Beiträgen konzentriere ich mich darauf, nützliche und präzise Informationen zu liefern, die sowohl für Fachleute als auch für Interessierte zugänglich sind. Ich lege großen Wert darauf, Quellen zu überprüfen und Informationen zu vergleichen, um sicherzustellen, dass ich meinen Lesern die bestmöglichen Einblicke gebe. Dabei ist es mir wichtig, schwierige Themen zu vereinfachen und klar zu strukturieren, damit jeder die Herausforderungen und Chancen der digitalen Welt besser verstehen kann.

Kommentar schreiben