[英]Redirect non-www to www https nginx (SSL_ERROR_BAD_CERT_DOMAIN)
我只是注意到如果沒有www
就無法在https上訪問我的頁面之一
所以我們有四種不同的情況:
http://example.com
<-可以
https://example.com
<- 不起作用
http://www.example.com
作品
https://www.example.com
作品
情況是,對於每個請求,無論您選擇哪種上述路線,都應始終以以下https://www.example.com
結尾: https://www.example.com
: https://www.example.com
我不是第一個遇到此問題的人,我嘗試了許多情況,但沒有任何運氣(例如,這些解決方案: 這里 )
當我嘗試訪問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
設置的啟發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.