Nginx すべてのサブドメインをサブドメイン以外の URL にリダイレクトする

Nginx すべてのサブドメインをサブドメイン以外の URL にリダイレクトする

現在、次のような問題が発生していますが、どう考えても解決できません。Google で見つけた 20 件を超える同様のスレッドは役に立ちません。

まず、次のような単純な HTTP から HTTPS へのリダイレクトを作成しました。

server {
    listen 80;
    server_name my-domain.com;
    return 301 https://my-domain.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name my-domain.com;
    ...
}

これは問題なく動作します。開こうとするとmy-domain.com、リダイレクトされますhttps://my-domain.comしかし、サブドメインの問題はまだ残っています。www.my-domain.comまたはtest.my-domain.comこれらのサブドメインをルートにリダイレクトしたいのですが翻訳ドメイン: https:// my-domain.com。その前にサブドメインはありません。HTTPS サブドメインでも同じことが表示されます。私は文字通り、すべてのサブドメインを禁止したいと考えています (今のところ)。

私は多くの設定を試しました。*.my-domain.comserver_name に追加しましたが、期待どおりに動作しません。また、*.my-domain.com から通常の HTTPS ドメインへの HTTPS リダイレクトも作成してみましたが、各構成で同様の結果になりました。

  1. すべての HTTP リクエストの結果は、サブドメインを含む HTTPS URL になります。
  2. すべての HTTPS リクエストは、サブドメインを含まない HTTPS URL にはなりません。

さて、私の質問は:すべてのサブドメイン(http と https)を、サブドメインを含まない特定の https URL にリダイレクトするにはどうすればいいでしょうか?すべての組み合わせは常に次のようになります:https:// my-domain.com$request_uri

前もって感謝します

アップデート:

問題を完全に解決したわけではありませんが、何とか解決できました。ドメイン構成で www.my-domain.com から my-domain.com への CNAME を作成しました。また、nginx を変更し、443 www.my-domain から https:// my-domain にリダイレクトする新しいサーバー構成を追加しました。また、www.my-domain から https:// my-domain にリダイレクトする通常のポート 80 サーバーもあります。証明書を変更し、ドメインとサブドメインのリストに www.my-domain を追加しました。これで、www.my-domain (http または https) のすべてのリクエストがリダイレクトされます。https://私のドメインまた、my-domain(httpでwww.なし)は、https://私のドメインこれも私のニーズには「適している」ようです。

答え1

ブロックを使用して、別のブロックで明示的に定義されていないドメインとdefault_server一致させることができます。この部分は、ワイルドカード証明書でのみ適切に機能します。httphttpsserverhttps

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    ... ssl configuration
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    ...
}

見るこのドキュメント詳細については。

関連情報