5212gelesen 1Kommentar
Es gibt viele Gründe, HTTP Umleitungen für Webseiten in der Konfiguration des Servers (in diesem Artikel hier nginx) einzusetzen. Beispielsweise wenn du eine Seite erneuerst du oder ein Link auf externen Seiten verwendet wird. Je nach Bedarf gibt es dazu einige Möglichkeiten um dem Webserver davon zu überzeugen, gültige Anfragen direkt weiterzuleiten. In der Konfiguration können Diese temporär sowie auch permanent konfiguriert werden. Wichtig dabei ist, dass der Server im Antwort-Header den richtigen HTTP-Statuscode zurücksendet. Hier zuerst einmal einige Beispiele:
- 200
Ok
-> die Anfrage wurde erfolgreich verarbeitet - 301
Moved Permanently
-> die angeforderte Ressource wurde dauerhaft verschoben und der Aufruf wird auf eine andere URL weitergeleitet - 302
Found(Moved Temporarily)
-> die angefragte Ressource ist derzeit nicht und der Aufruf wird auf eine andere Adresse weitergeleitet - 404
Not Found
-> die angefragte Ressource ist nicht verfügbar
Weitere Statuscodes sowie deren ausführlichen Beschreibungen findest du auf der deutschen Wikipedia Seite unter de.wikipedia.org/wiki/HTTP-Statuscode
Achtung: In diesem Artikel werden keine internen Weiterleitungen (wie Proxy-Funktionalität) beschrieben. Hierzu schreibe ich in Kürze einen eigenen Artikel.
Permanente Weiterleitung im Webserver von HTTP nach HTTPS für nginx
Um alle Anfragen weiterzuleiten sind nur wenige Schritte notwendig. Im Folgenden legst du eine 2. server
– Konfiguration direkt nach der Konfiguration der verschlüsselten server
– Konfiguration anlegen.
server {
server_name www.example.com;
listen 443 ssl;
...
}
server {
server_name www.example.com;
listen 80;
if($host = www.example.com) {
return 301 https://$host$request_uri;
}
}
Einfache Weiterleitung innerhalb des Webservers
Innerhalb einer Serverkonfiguration kannst du überdies die location
Funktion eine Weiterleitung konfigurieren. Diese Umleitungen verarbeitet nginx ab sofort so wie du sie benötigst. Sofern diese nur in geringer Anzahl da sind kannst du diese in der server
Konfiguration direkt ablegen.
server { location /alt { return 302 /neu.html } }
Innerhalb der location
Definition gibt es unterschiedliche RegEx-Funktionen die du in der Dokumentation unter nginx.org/en/docs/ nachlesen kannst.
Mehrere Weiterleitungen im Webserver in einer zentralen Datei verwalten
Wenn du eine alte Seite erneuerst wird zwangsweise immer auf das gleiche Problem stoßen, eine permanente Weiterleitung im Webserver von nicht mehr vorhandenen Dateipfaden (URI’s). Daher hat nginx hier eine Möglichkeit geschaffen – die Verwendung einer Key -> Value
Tabelle mittels Keymap-Datei
Zuerst wird eine map Datei erstellt (Dateiendung nicht notwendig). Ich verwende hierzu der Übersicht halber eine eigene Datei (die Konfiguration kannst du auch direkt in der jeder anderen schon verwendeten Datei gesetzt werden). path/to/com.example.www.map
map $request_uri $new_uri { /old/path.html /new/path.html; /old-path/ /new-path/; /old-x /new-y; }
Diese Datei muss nur innerhalb der http
Struktur eingefügt werden:include path/to/com.example.www.map
Jetzt wird die Datei innerhalb der server
Struktur einer Datei eingefügt:
include path/to/com.example.www.map server { server_name www.example.com; listen 443 ssl; location / { if ($new_uri) { return 301 https://$host$new_uri; } try_files $uri $uri/; } }
Mit dieser Lösung kannst du eine nginx Instanz für eine Domain sämtliche Anfragen bearbeiten. Alle anderen server
-Konfigurationen bleiben allerdings infolgedessen davon unberührt.
Fazit
Ich hoffe, ich konnte dir auf deiner Suche nach einer Lösung zu HTTP Umleitungen für nginx helfen, abgesehen davon kannst du mir gerne mit Hilfe der Kommentar-Funktion über die Möglichkeiten diskutieren. Gerne auch Feedback – so kann ich den Artikel weiterhin aktualisieren.
Zuletzt noch eine Artikel-Empfehlung für dich. Möchtest du mehr über Monitoring in nginx erfahren? Ich habe einen Artikel über zwei Module – VTS und VTS-Exporter geschrieben.
Foto: Taylor Vick
1 Kommentar
von Cathleen
Klasse !!
Ein gern gelesener Beitrag den du geschrieben hast.
Es ist schwierig über das Thema im Internet was zu
finden.Und schon was dazu gelernt!