特定域的 nginx 重定向

nginx redirect for a specific domain

我想重定向流量来自:

     http://demo.foo.com/a.png
to   http://demo.bar.com/a.png

需要注意的是 foo.combar.com 都是同一个盒子。所以我需要指定重定向仅针对 foo.com 流量发生,以避免在 bar.com 流量上出现重定向循环。

我试过这个:

server {
  server_name  demo.foo.com;
  return       301 $scheme://demo.bar.com$request_uri;
}

等待一分钟后生效...这看起来很有希望:

curl -I http://demo.foo.com

301 如期出现。但是,有两个问题:

1) 运行 curl -I http://demo.bar.com 也返回了 301 重定向到 demo.bar.com(所以我的 server_name 过滤器不起作用)
2) 再过几分钟 (~2-3) 两个 curl 命令都停止工作,并且 return 一条 503 Unavailable 消息(这可能是由于 #1 引起的重定向循环)

我们正在使用这样的缩写:

server {
   ...

   server_name demo.foo.com demo.bar.com;

   if ($http_host = "demo.foo.com") {
      rewrite ^ http://demo.bar.com:$server_port$request_uri permanent;
   }

   ...
}