it-swarm.com.de

nginx.conf leitet mehrere Bedingungen um

Ich möchte Anfragen unter zwei Bedingungen mit nginx umleiten. 

Das funktioniert nicht:

  if ($Host = 'domain.com' || $Host = 'domain2.com'){
    rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
  }   

Was ist der richtige Weg, dies zu tun?

44
mark

Ich hatte das gleiche Problem schon einmal. Da nginx keine komplexen Bedingungen oder verschachtelten if-Anweisungen ausführen kann, müssen Sie zwei verschiedene Ausdrücke auswerten.

setzen Sie eine Variable auf einen Binärwert und aktivieren Sie sie, wenn eine der beiden Bedingungen in zwei verschiedenen if-Anweisungen wahr ist:

set $my_var 0;
if ($Host = 'domain.com') {
  set $my_var 1;
}
if ($Host = 'domain2.com') {
  set $my_var 1;
}
if ($my_var = 1) {
  rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
}   
80
Chris Barretto

Der richtige Weg wäre, einen dedizierten Server für die Weiterleitung zu verwenden:

server {
  server_name domain.com domain2.com;
  rewrite ^ http://www.domain.com$request_uri? permanent;
}
21
kolbyjack

eine andere Möglichkeit wäre

server_name domain.com domain2.com;
set $wanted_domain_name domain.com;
if ($http_Host != $wanted_domain_name) {
    rewrite  ^(.*)$  https://$wanted_domain_name$1;
}

es wird also alles auf eine bestimmte Seite umleiten, aber es basiert auf der Usecase, die ich schätze

5
shadowdroid

Hier ist ein deklarativer Ansatz:

server {
    listen       80;
    server_name  domain.com domain2.com;
    return 301 $scheme://www.domain.com$uri;    
}

server {
    listen       80  default_server;
    server_name  _;
    #....
}
4
Cole Tierney

Umschreiben mehrerer Domänen in eine einzige Domäne und Vermeiden von Schleifenbedingungen im Browser.

server {
    listen       80;
    server_name  www.wanted_domain.com wanted_domain.com www.un_wanted_domain.com un_wanted_domain.com;
    if ($Host = 'un_wanted_domain.com'){
       return 301 $scheme://www.wanted_domain.com$request_uri;
    }
    if ($Host = 'www.un_wanted_domain.com'){
       return 301 $scheme://www.wanted_domain.com$request_uri;
    }
3
David

Ich denke, der einfachste Weg, es zu tun, ist der reguläre Ausdruck:

if ($Host ~ "domain.com|domain2.com") {
    rewrite ^/(.*)$ http://www.example.com/$1 permanent;
}

Aber es ist nur gut, wenn Sie nur Saiten haben. für komplexe Logik ist es sicher nicht richtig.

1