gpt4 book ai didi

ubuntu - 将非 www 重定向到 www https nginx (SSL_ERROR_BAD_CERT_DOMAIN)

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:22 25 4
gpt4 key购买 nike

我刚刚注意到我的一个页面在没有 www

的情况下无法通过 https 访问

所以我们有四种不同的场景:

http://example.com <- 有效

https://example.com <- 不起作用

http://www.example.com 有效

https://www.example.com 有效

情况是,对于每个请求,无论您选择的上述路线如何,您都应该始终以以下方式结束:https://www.example.com

我不是第一个遇到这个问题的人,我尝试了很多方案但没有任何运气(例如这些解决方案:here)

当我尝试访问 https://example.com 时,我得到一个 SSL_ERROR_BAD_CERT_DOMAIN。因此,该证书仅对 www.example.com 有效,这是有道理的。但我还有另一个对 example.com 有效的证书。

我的 NGINX 设置如下所示:

server {
listen 443 ssl;
server_name example.com

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

return 301 https://www.example.com$request_uri;
}


server {
listen 443 default_server ssl;
server_name www.example.com;

root /home/build/;
index index.html index.htm;

ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

location / {
try_files $uri /index.html;
}
}

server {
listen 80;
server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;
}

我已经使用 NGINX 一段时间了,直到最近我才真正注意到我遇到了这个问题。我知道我可以在有和没有 www 的情况下提供页面,这将解决问题。但我希望每次交互都应该在 www.example.com 上进行,而不是没有 www

我在 Ubuntu 18.04 上运行 NGINX 版本 1.14.0。

所有帮助都适用。

最佳答案

如果有人感兴趣,我已经解决了这个问题。

我没有拥有多个证书,而是获得了一个通配符证书,并向其中添加了根域。

因为 LetsEncrypt,正如我在这种情况下使用的,也提供免费的通配符证书,我的所有子域和根域都可以使用相同的证书。

安装通配符证书后,我的 NGINX 文件如下所示:

server {
listen 443 default_server ssl;
server_name www.example.com;

root /home/build/;
index index.html index.htm;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

location / {
try_files $uri /index.html;
}
}

server {
server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;

listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
if ($host = example.com) {
return 301 https://$host$request_uri;
}


if ($host ~ ^[^.]+\.example\.com$) {
return 301 https://$host$request_uri;
}


listen 80;
server_name www.example.com example.com;
return 404;
}

应该说,代码的最后一部分很大程度上受到了certbot的setup的启发。

关于ubuntu - 将非 www 重定向到 www https nginx (SSL_ERROR_BAD_CERT_DOMAIN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com