簡體   English   中英

將非www重定向到www https nginx(SSL_ERROR_BAD_CERT_DOMAIN)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM