Nginx-從 HTTPS 中刪除 WWW

Nginx-從 HTTPS 中刪除 WWW

我想就以下 Nginx 配置尋求一些幫助,以便將諸如 之類的 URLhttps://www.mywebsite.com重寫為https://mywebsite.com.我目前正在使用以下配置:

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

    # Some more settings...
}
server {
    listen 443 ssl;
    server_name mywebsite.com;

    ssl_certificate path_to_ssl_certificate;
    ssl_certificate_key path_to_ssl_certificate_key;

    # Some more settings...
}

如果重要的話,我使用的證書是通配符 SSL 證書,它是在伺服器本身(Ubuntu 12.04)上使用 OpenSSL 自簽署的。正在發生的事情是www.mywebsite.com正確地重定向到mywebsite.com,但是https://www.mywebsite.com 才不是重定向到https://www.mywebsite.com(即,www在瀏覽器中查看頁面時仍會出現)。我可能做錯了什麼?

答案1

解決方案是將第一個伺服器區塊修復為:

server {
    listen 80;
    listen 443;
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}

例如,您忘記在 ssl 連接埠上捕獲 www.mywebsite.com 連接,僅此而已。順便說一句,這是從網站名稱中刪除 www 的最佳方法,不錯的選擇。

答案2

您的重定向發生在僅偵聽連接埠 80 的虛擬主機。除非你的瀏覽器都支援神經網路研究所,您只能擁有一個 SSL 虛擬主機,因此該規則需要進入您現有的 SSLserver區塊。

if ($host = www.mywebsite.com) {
    rewrite ^ https://mywebsite.com$request_uri? permanent;
}

相關內容