我确实有一个响应多个域的 nginx 服务器,并且我确实想将所有请求重定向到主域。
例如:网站对和xxx xxx.example.com yyy.example.com $hostname
均作出响应。http
https
我想以这样的方式配置服务器,以便所有对其他域名的请求都将被重定向到xxx.example.com
。
答案1
我认为应该采取以下措施:
set $primary_domain "xxx.example.com";
if ($host != $primary_domain) {
rewrite ^ $scheme://$primary_domain permanent;
}
答案2
最有效和干净的方法是配置两个单独的服务器{}块 - 一个用于执行重定向,另一个(具有规范名称)用于实际处理请求。
示例配置:
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 ...
...
}
文档:
答案3
这是 Brenton Alker 的答案的一个变体,使用$server_name
多变的重用该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 请求中给出的主机名。
请注意,if
nginx 配置中的语句并不总是能达到您的预期,有些人不鼓励使用它。另请参阅https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/