2016-01-27 134 views
6

我在server_name中使用通配符。我想重定向的example.com所有子域(配置为* example.com)的情况,以foo.com除了xyz.example.com如何在nginx配置中排除特定的子域名server_name

我的配置如下

server { 
     listen   80; 
     server_name  *.example.com; 
     location/{ 
      proxy_pass  http://$1.foo.com; 
     } 
} 

我不想改变任何要求来xyz.example.com

回答

4

您至少需要两个服务器块,而nginx将选择更具体的服务器块来处理请求。有关详细信息,请参见this document

您将需要一个服务器块xyz.example.com如:

server { 
    listen  80; 
    server_name xyz.example.com; 

    location/{ 
     proxy_pass http://$1.foo.com; 
    } 
} 

然后是一个default_server或者通配符服务器,如:

server { 
    listen 80; 
    server_name *.example.com; 
    return http://foo.com/; 
} 

或者:

server { 
    listen 80 default_server; 
    return http://foo.com/; 
} 
+0

感谢@Richard这是为我工作。 –