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;
}