web-dev-qa-db-ja.com

ワイルドカードサブドメインをhttps(nginx)にリダイレクトする

私はワイルドカードの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にリダイレクトするにはどうすればよいですか?

20
whatWhat

それで全部です...

server {
    listen      80;
    server_name *.mydomain.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$Host$request_uri;
}
49
cadmi

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を試すこともできます。我々に教えてください!

2
Apurva Sukant