Deutsch

Nginx-Weiterleitungen 301 und 302 auf dem Linux-VPS

3 min
VPS/VDS-Hosting

Weiterleitungen erhalten Besucher und Suchranking, wenn eine Seite umzieht, Sie die Domain wechseln oder HTTPS erzwingen. Diese Anleitung zeigt, wie Sie saubere Nginx-Weiterleitungen auf Ihrem VPS Linux Infrawire schreiben und testen, bevor sie live gehen.

📋 Voraussetzungen

  • Ein Linux-VPS (Ubuntu 24.04 / Debian 12 oder AlmaLinux 9 / Rocky 9) mit SSH-Root-Zugang. IP und Root-Passwort finden Sie in Ihrem Kundenbereich.
  • Nginx ist installiert und liefert mindestens eine Website aus (sudo apt install nginx oder sudo dnf install nginx).
  • Ein Domainname (example.com), dessen DNS-Einträge A/AAAA auf VPS_IP zeigen.

🧭 301 oder 302: welche Wahl

  • 301 (Moved Permanently): Der Umzug ist endgültig. Browser und Suchmaschinen speichern ihn und übertragen das Ranking auf die neue URL.
  • 302 (Found): Der Umzug ist vorübergehend (Wartung, A/B-Test). Die alte URL bleibt maßgeblich.

Im Zweifel starten Sie mit 302: Ein falsches 301 kann lange im Browser-Cache bleiben.

⚙️ return oder rewrite

Bevorzugen Sie return: Es ist schneller und lesbarer, weil Nginx die Verarbeitung sofort beendet.

Nginx
location = /old-page { return 301 /new-page; }

Nutzen Sie rewrite nur, wenn Sie einen Teil der URL per regulärem Ausdruck erfassen müssen:

Nginx
rewrite ^/blog/(\d+)/(.*)$ /articles/$2 permanent;

Das Flag permanent sendet ein 301, redirect ein 302.

🌐 www auf non-www weiterleiten

Legen Sie einen eigenen Server-Block an, der nur weiterleitet. Bearbeiten Sie /etc/nginx/sites-available/example.com (Debian/Ubuntu) oder /etc/nginx/conf.d/example.com.conf (AlmaLinux/Rocky):

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name www.example.com; 5 return 301 $scheme://example.com$request_uri; 6}

Für die Gegenrichtung tauschen Sie die beiden Hostnamen. $request_uri behält Pfad und Query-String.

🔒 HTTP auf HTTPS weiterleiten

Sobald ein Zertifikat installiert ist, schicken Sie den gesamten Klartext-Verkehr auf HTTPS:

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com www.example.com; 5 return 301 https://example.com$request_uri; 6} 7 8server { 9 listen 443 ssl; 10 listen [::]:443 ssl; 11 http2 on; 12 server_name www.example.com; 13 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 14 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 15 return 301 https://example.com$request_uri; 16}

Die eigentliche Website liegt dann in einem dritten Block, der auf 443 mit server_name example.com; lauscht. http2 on; erfordert Nginx 1.25.1 oder neuer, was unter Ubuntu 24.04 der Fall ist.

🔗 Alte URL auf neue URL

Für wenige Seiten nutzen Sie exakte Treffer (=), die am schnellsten sind:

Nginx
location = /about-us.html { return 301 /about; } location = /promo { return 302 /offers/current; }

Für einen verschobenen Ordner mit Beibehaltung der Unterpfade:

Nginx
location /docs/ { rewrite ^/docs/(.*)$ /help/$1 permanent; }

🏠 Eine ganze Domain weiterleiten

Wenn Sie old-example.com zugunsten von example.com aufgeben, behalten Sie alle Pfade:

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name old-example.com www.old-example.com; 5 return 301 https://example.com$request_uri; 6}

Hat die alte Domain auch HTTPS, fügen Sie einen passenden listen 443 ssl;-Block mit eigenem Zertifikat hinzu, sonst zeigen Browser vor der Weiterleitung einen Zertifikatsfehler.

✅ Testen und sauber neu laden

Prüfen Sie immer zuerst die Syntax. Ein Reload erhält laufende Verbindungen, ein Restart nicht.

Bash
sudo nginx -t sudo systemctl reload nginx

Prüfen Sie dann die Header, ohne der Weiterleitung zu folgen:

Bash
curl -I http://www.example.com/old-page

Erwartete Ausgabe (gekürzt):

HTTP/1.1 301 Moved Permanently
Server: nginx
Location: https://example.com/old-page

Mit curl -IL http://www.example.com/old-page folgen Sie der ganzen Kette und sehen jeden Schritt. Ideal ist ein einziger Schritt: Vermeiden Sie Ketten wie HTTP, dann www, dann HTTPS.

🛠️ Fehlerbehebung

Zu viele Weiterleitungen (Schleife). Eine Regel trifft auf ihr eigenes Ziel, oft weil ein Proxy oder CDN HTTPS bereits terminiert. Prüfen Sie den Location-Header mit curl -I und stellen Sie sicher, dass der Zielblock nicht erneut weiterleitet.

Die Änderung wirkt nicht. Sie haben eine nicht aktivierte Datei bearbeitet. Prüfen Sie unter Debian/Ubuntu den Link in /etc/nginx/sites-enabled/ und führen Sie sudo nginx -t und sudo systemctl reload nginx aus. Browser cachen auch 301: Testen Sie mit curl oder einem privaten Fenster.

Query-String verloren. Bei rewrite ... ? oder festem Ziel verschwinden Parameter. Nutzen Sie $request_uri in return oder behalten Sie $args ausdrücklich bei.

Falscher Block antwortet. Nginx wählt den Block nach server_name. Listen Sie sie mit sudo nginx -T | grep server_name auf und suchen Sie Duplikate.


🎉 Ihre Weiterleitungen sind aktiv: dauerhaft, wo es endgültig ist, temporär, wo nicht, und mit curl getestet, bevor Ihre Besucher etwas merken.

Bleiben Sie über die neuesten Angebote, Rabatte und Sonderaktionen informiert.

Aktionen ansehen

Wir verwenden Cookies

Wir verwenden Analyse-Cookies, um Ihre Erfahrung auf unserer Website zu verbessern. Es werden keine Daten an Dritte verkauft. Mehr erfahren Sie in unserer Datenschutzerklärung.