Nginx-HTTPS から WWW を削除する

Nginx-HTTPS から WWW を削除する

https://www.mywebsite.com次のような Nginx 設定で、 などの URL がのように書き換えられるようにしたいのですが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...
}

念のため言っておきますが、私が使用している証明書は、サーバー自体(Ubuntu 12.04)でOpenSSLを使用して自己署名されたワイルドカードSSL証明書です。何が起こっているかというと、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経由で入ってくるリクエストをリダイレクトするには、SSLでポート443をリッスンする仮想ホストが必要です。ブラウザがすべてサポートしていない限り、スニSSL 仮想ホストは 1 つしか持てないため、ルールを既存の SSLserverブロックに追加する必要があります。

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

関連情報