我有一个nginx服务器响应几个域,我想redirect到主域的所有请求。
例如: xxx xxx.example.com yyy.example.com $hostname网站响应xxx xxx.example.com yyy.example.com $hostname用于http和https 。
我想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/