如何configurationnginx自动redirect到主要的主机名?

每个nginxconfiguration可以代理广泛的域名,但我想自动redirect请求到第一个域名(官方)。

server { server_name a.example.com b.example.com; } 

如果有人inputb.example.com/some ,我想要直接转到a.example.com/some

这与http://wiki.nginx.org/Pitfalls#server_Name的好例子几乎是一样的。 也就是说,你应该使用两个服务器:

 server { server_name b.example.com; return 301 $scheme://a.example.com$request_uri; # For pre-0.8.42 installations: # rewrite ^ $scheme://a.example.com$request_uri? permanent; } server { server_name a.example.com; # Do stuff } 

要在单个服务器块中执行此操作,可以使用if和$server_name变量 :

  server_name primary.tld secondary.tld; if ($host != $server_name) { rewrite ^ $scheme://$server_name permanent; } 

或者,保留任何查询参数:

  server_name primary.tld secondary.tld; if ($host != $server_name) { rewrite ^/(.*) $scheme://$server_name/$1 permanent; } 

在这里, $server_name是指主服务器名称,它是server_name指令中的第一个名称,而$host是指HTTP请求中给出的主机名称。

请注意,nginx配置中的if语句并不总是按照您所期望的来执行,其中的一些使用不受欢迎。 另见https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

这个答案的灵感来自于另一个使用类似的问题的问题的答案 。