我正在尝试将我的网站的域名从 更改https://www.myolddomain.se/
为https://www.mynewdomain.se/
问题是,对于我的旧域名,我强制所有页面都使用 SSL,因此谷歌和其他网站上的所有链接都使用 https 链接。当我尝试从 https 链接访问旧域名时,出现证书错误。所以我的问题是:如何在 nginx 中将所有使用 https 链接的页面重定向到另一个 https 安全域,而不会出现此错误?
我做了一些研究,找到了这个重定向网页的解决方案,现在已将其插入到我的配置文件中。但我仍然收到证书错误!
server {
server_name .myolddomain.se;
return 301 https://www.mynewdomain.se$request_uri;
}
但我就是无法让它工作!如果有人能给出答案,我将不胜感激
答案1
解决方案取决于客户能力、预算和架构特性。
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
}
如果没有,但可以理解 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
}
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
}