Wie leite ich mit NGINX zu einer anderen Domain um?


136

Wie kann ich mydomain.comund jede Subdomain *.mydomain.comzur www.adifferentdomain.comVerwendung von NGINX umleiten ?

Antworten:


276

Servername unterstützt Suffix-Übereinstimmungen mit der .mydomain.com-Syntax:

server {
  server_name .mydomain.com;
  rewrite ^ http://www.adifferentdomain.com$request_uri? permanent;
}

oder auf einer Version 0.9.1 oder höher:

server {
  server_name .mydomain.com;
  return 301 http://www.adifferentdomain.com$request_uri;
}

1
Muss ich keinen Port eingeben, um abzuhören? Beispiel: Hören Sie 80. Ich habe mehrere Domänen, die ich zu einer primären Domäne umleiten muss, aber mein Server verfügt auch über mehrere virtuelle Server für verschiedene andere Domänen.
Ryan

1
@Ryan Die listenDirektive verwendet standardmäßig Port 80, wenn nichts angegeben ist. Es ist tatsächlich etwas komplizierter als das im Allgemeinen; Weitere Informationen finden Sie in den Nginx-Konfigurationsdokumenten .
Yitz

2
Was erreicht das ?am Ende?
Dan Dascalescu

5
Was ist der Unterschied zwischen rewriteund return 301 $scheme://www.adifferentdomain.com$request_uri;?
Dan Dascalescu

6
Das ? Am Ende eines Umschreibens wird nginx angewiesen, die ursprüngliche Abfragezeichenfolge nicht anzuhängen. Da $request_uridie Abfragezeichenfolge bereits vorhanden ist, muss sie nicht erneut angehängt werden. Die return 301Syntax ist neuer und es sollte keinen Unterschied im Verhalten zwischen den beiden Methoden geben, aber als ich diese Frage ursprünglich beantwortete, hatten viele Distributionen nicht die erforderliche Version, also habe ich mich für die sicherere Syntax entschieden.
Kolbyjack


15

Warum das Rewrite-Modul verwenden, wenn Sie können return? Technisch gesehen returnist es Teil des Rewrite-Moduls, wie Sie hier lesen können, aber dieses Snippet ist imho einfacher zu lesen.

server {
    server_name  .domain.com;

    return 302 $scheme://forwarded-domain.com;
}

Sie können ihm auch eine 301-Weiterleitung geben.


1
Wird dies auch den Pfad und die Abfrageparameter beibehalten?
Mpen

3
Nein, dieses Beispiel macht das nicht @Mark. Aber ich nehme an, Sie können die vorherigen Antworten verwechseln, um so etwas zu finden:return 302 $scheme://forwarded-domain.com$request_uri;
Robin van Baalen

Nebenbei bemerkt, in vielen Fällen sollten Sie wahrscheinlich nur zu https umleiten, anstatt das Schema beizubehalten (dh https anstelle von $ Schema verwenden). Dies ist aus den gleichen Gründen, warum protokollbezogene Links jetzt als veraltet gelten - paulirish.com/2010/the-protocol-relative-url
mahemoff

@ Mahemoff Das stimmt nicht ganz. Stellen Sie sich den Fall vor, dass sich der Webserver hinter einem Loadbalancer befindet, der ssl entlädt.
Sebastian Neira

11

Das sollte über HTTPRewriteModule funktionieren .

Beispielumschreibung von www.example.com auf example.com:

server {    
    server_name www.example.com;    
    rewrite ^ http://example.com$request_uri? permanent; 
}

Das leitet nur www.example.com zu example.com um. Ich möchte beide auf eine andere Domain umleiten. Kann ich das in einer Regel tun?
Deb

Ich weiß es nicht genau, aber ich denke, dass der Servername mydomain.com; www.adifferentdomain.com permanent umschreiben; } Sollte es tun? Das sollte alles dauern * .mydomain.com?
Udo

@deb hättest du nur server_name example.com www.example.com;.
Citruspi

In der Frage wird speziell gefragt, ob Subdomains zu einer anderen Domain umgeleitet werden sollen . Diese Antwort beantwortet keine der beiden (explizit).
Kissaki

Hier fehlt der wichtige 301!
Sliq

9

Wenn Sie Anforderungen für "domain1.com" an "domain2.com" umleiten möchten, können Sie einen Serverblock erstellen, der folgendermaßen aussieht:

server {
    listen 80;
    server_name domain1.com;
    return 301 $scheme://domain2.com$request_uri;
}

Möglicherweise muss jemand auch die https: // -Anforderung umleiten. listen 443;
Rafik Farhad

0

Temporäre Weiterleitung

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;

Permanente Weiterleitung

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;

In der Nginx-Konfigurationsdatei für eine bestimmte Site:

server {    
    server_name www.example.com;
    rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;

}

0

Sie können einfach eine if-Bedingung in den Serverblock {} schreiben:

server { 

    if ($host = mydomain.com) {
        return 301 http://www.adifferentdomain.com;
    } 
}

Sie müssen vorsichtig sein, wenn Sie ' if' -Anweisungen in Nginx verwenden ( nginx.com/resources/wiki/start/topics/depth/ifisevil ). In diesem Fall können Sie stattdessen einfach 'Servername mydomain.com' verwenden.
Marty

Wenn es böse ist, wenn es im Standortkontext verwendet wird, ist es sicher, wenn es verwendet wird, um den Umleitungshost
cryptoKTM
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.