如何configurationnginxredirect从域别名到主域的所有请求?

我有一个nginx服务器响应几个域,我想redirect到主域的所有请求。

例如: xxx xxx.example.com yyy.example.com $hostname网站响应xxx xxx.example.com yyy.example.com $hostname用于httphttps

我想configuration服务器的方式,所有对其他域名的请求将redirect到xxx.example.com

我认为应该沿着这些方向行事:

 set $primary_domain "xxx.example.com"; if ($host != $primary_domain) { rewrite ^ $scheme://$primary_domain permanent; } 

最有效和干净的方法是configuration两个独立的服务器块(一个用于redirect,另一个用规范的名称)来实际处理请求。

configuration示例:

 server { listen 80; listen 443 ssl; server_name xxx yyy.example.com $hostname; ssl_certificate ... ssl_certificate_key ... return 302 $scheme://xxx.example.com$request_uri; } server { listen 80; listen 443 ssl; server_name xxx.example.com; ssl_certificate ... ssl_certificate_key ... ... } 

文档:

这是Brenton Alker的一个变种,使用$server_namevariables来重新使用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请求中给出的主机名称。

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