私はワイルドカードのssl認定を取得しており、ssl以外のすべてのトラフィックをsslにリダイレクトしようとしています。現在、私は正常に機能しているサブドメイン化されていないURLのリダイレクトに以下を使用しています。
server {
listen 80;
server_name mydomain.com;
#Rewrite all nonssl requests to ssl.
rewrite ^ https://$server_name$request_uri? permanent;
}
* .mydomain.comに対して同じことをすると、論理的にリダイレクトされます
https://%2A.mydomain.com/
すべてのサブドメインを同等のhttpsにリダイレクトするにはどうすればよいですか?
それで全部です...
server {
listen 80;
server_name *.mydomain.com;
#Rewrite all nonssl requests to ssl.
return 301 https://$Host$request_uri;
}
NGINXの公式ドキュメントでは、リダイレクトを行うためにrewriteディレクティブを使用する代わりに、returnディレクティブを使用することを推奨しています。これは、書き換えられるリクエストがそのサーバー用ではないためです。ただし、サーバーブロックで処理されます。そのため、すべての処理が停止し、応答がすぐに送信されるため、リダイレクトは代わりにreturnディレクティブで正しく行われます。 NGINXはここでリダイレクトの書き換えを推奨しません: http://nginx.org/en/docs/http/converting_rewrite_rules.html
Returnディレクティブの構文は次のとおりです。return code URL;最初は永続的な書き換えを行っていたので、それに応じて301を応答のコードとして使用でき、永続的なリダイレクトであることを示します。 httpsアドレスがurlセクションに渡されます。リファレンス: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
だからあなたの正しい設定は
server {
listen 80;
server_name *.mydomain.com;
#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}
これにより、ワイルドカードサーバーブロックを使用して、sslドメインに正しくリダイレクトできます。上記のコメントで提案されているように、アンダースコアの汎用サーバー名「_」または$ Hostを試すこともできます。我々に教えてください!