Nginx 使用 ssl 从旧域重定向到新域

use*_*341 10 nginx redirect ssl-certificate

我正在尝试将我网站的域名从https://www.myolddomain.se/更改为https://www.mynewdomain.se/

问题是,对于我的旧域,我在所有页面上强制使用 SSL,因此 google 和其他站点上的所有链接都与 https 链接。当我尝试从 https 链接访问旧域时,出现证书错误。所以我的问题是:如何将所有与 https 链接的页面重定向到 nginx 中的另一个 https 安全域,而不会出现此错误?

我做了一些研究,发现了这个重定向网页的解决方案,它现在插入到我的配置文件中。虽然我仍然收到证书错误!

server {
        server_name .myolddomain.se;
        return 301 https://www.mynewdomain.se$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

但我就是无法让它工作!如果有人能提出答案,我将不胜感激

Xav*_*cas 11

该解决方案取决于客户能力、您的预算和架构特性。

1. 如果两个域都托管在同一个 IP 地址上并且您不能拥有另一个域:

如果客户端支持 TLS SNI 扩展:

server {
    listen X.X.X.X:443 ssl;
    ssl_certificate /path/to/myolddomain.cert;
    ssl_certificate_key /path/to/myolddomain.key;
    server_name .myolddomain.se;
    return 301 https://www.mynewdomain.se$request_uri;
}


server {
    listen X.X.X.X:443 ssl;
    ssl_certificate /path/to/mynewdomain.cert;
    ssl_certificate_key /path/to/mynewdomain.key;
    server_name .mynewdomain.se;

    [ ... ] # Your stuff

}
Run Code Online (Sandbox Code Playgroud)

如果它不能但理解 x509 扩展名,SubjectAltName并且您可以负担得起生成新证书,那么请为两个域请求一个唯一证书。配置应如下所示:

server {
    listen X.X.X.X:443 ssl default_server;
    ssl_certificate /path/to/domain.cert;
    ssl_certificate_key /path/to/domain.key;
    server_name _;
}

server {
    listen X.X.X.X:443;
    server_name .myolddomain.se;
    return 301 https://www.mynewdomain.se$request_uri;
}


server {
    listen X.X.X.X:443;
    server_name .mynewdomain.se;

    [ ... ] # Your stuff

}
Run Code Online (Sandbox Code Playgroud)

2. 如果每个域都在不同的 IP 地址上,或者如果它在同一个 IP 地址上,但您可以拥有另一个

最通用的解决方案,监听两个不同的 IP(通常一个额外的公共 IP 是“简单”的一个选项,可以在您的托管服务提供商处购买):

server {
    listen X.X.X.X:443 ssl;
    ssl_certificate /path/to/myolddomain.cert;
    ssl_certificate_key /path/to/myolddomain.key;
    server_name .myolddomain.se;
    return 301 https://www.mynewdomain.se$request_uri;
}

server {
    listen Y.Y.Y.Y:443 ssl;
    ssl_certificate /path/to/mynewdomain.cert;
    ssl_certificate_key /path/to/mynewdomain.key;
    server_name .mynewdomain.se;

    [ ... ] # Your stuff

}
Run Code Online (Sandbox Code Playgroud)

  • 太感谢了!这个答案对我来说非常有效,我不希望有一个更彻底的答案。我非常感激,谢谢! (2认同)