如何配置 nginx 将所有请求从域别名重定向到主域?

如何配置 nginx 将所有请求从域别名重定向到主域?

我确实有一个响应多个域的 nginx 服务器,并且我确实想将所有请求重定向到主域。

例如:网站对和xxx xxx.example.com yyy.example.com $hostname均作出响应。httphttps

我想以这样的方式配置服务器,以便所有对其他域名的请求都将被重定向到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 请求中给出的主机名。

请注意,ifnginx 配置中的语句并不总是能达到您的预期,有些人不鼓励使用它。另请参阅https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

相关内容