Как в Nginx сделать перенаправление на другой домен, сохранив при этом путь и поддомен?

Как в Nginx сделать перенаправление на другой домен, сохранив при этом путь и поддомен?

Так, например, у меня есть домен olddomain.comиnewdomain.com

Вот как я хочу, чтобы работало перенаправление запросов:

sub.olddomain.com/hello/world -> sub.newdomain.com/hello/world olddomain.com/hello/world -> newdomain.com/hello/world

Существует много поддоменов, поэтому в идеале я бы не хотел создавать правило для каждого из них.

Это кажется решением:

server {
  listen 80;
  server_name olddomain.com *.olddomain.com;
  rewrite ^(/)(.*)$ http://newdomain.com/$2 permanent;
}

но это не работает с поддоменами, так как все поддомены будут перенаправляться newdomain.com/pathнезависимо от поддомена.

решение1

Кажется, вы ищете что-то вроде этого:

if ($http_host ~ (.*)\.olddomain\.com) {
    set $subdomain $1;
    rewrite (.*)$ http://$subdomain.newdomain.com$1 permanent;
}
rewrite ^(/)(.*)$ http://newdomain.com/$2 permanent;

Это мои тестовые случаи

$ curl -I -H "Host: test1.olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:33 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.newdomain.com/

$ curl -I -H "Host: test1.test2.olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:38 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.test2.newdomain.com/

$ curl -I -H "Host: test1.test2.olddomain.com" nginx1.tst/with-something/appended.html
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:40:54 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://test1.test2.newdomain.com/with-something/appended.html

$ curl -I -H "Host: olddomain.com" nginx1.tst
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.4
Date: Thu, 08 May 2014 19:41:10 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://newdomain.com/

Связанный контент