web-dev-qa-db-ja.com

DNSとnginxを使用して、1つのドメインからすべてのサブドメインを別のドメインの同等のサブドメインにリダイレクトしますか?

foo.examplebar.exampleがあります。 sub.foo.examplesub.bar.exampleasdf.foo.exampleasdf.bar.exampleなど)と同じようにすべてのサブドメインにリダイレクト(エイリアスは使用しない)します。

ワイルドカードDNSレコードを使用して、foo.exampleのすべてのサブドメインをbar.exampleの特定のサブドメインにリダイレクトできることを知っています(たとえば、sub.foo.exampleasdf.foo.exampleはどちらもwww.bar.exampleに移動します)。 。

これは可能ですか?

2
Tim Morris

DNSで何ができるかについての誤解があります。 「ワイルドカードDNSレコードを使用して、すべてのサブドメインをリダイレクトできることはわかっています。」ただし、DNSはリダイレクトをまったく実行できません。 DNSでできることは、ドメイン(またはサブドメイン)がサーバーのIPアドレスを指すようにすることだけです。 CNAMEレコードを使用しても、DNSはリダイレクトしません。 CNAMEは、ドメインが他のドメインと同じIPアドレスに解決されることを意味します。同じWebサーバーが両方のドメインの要求を処理します。それらが別個のサイトになるか、またはリダイレクトされるかは、Webサーバー次第です。

DNSはリダイレクトできないため、ワイルドカードレコードを使用して、すべてのサブドメインを単一のサーバーに解決させることができます。サブドメインの場合、サーバーのIPアドレスでAレコードを使用するか、別のホスト名でCNAMEレコードを使用できます。ドメインの頂点にはCNAMEレコードを使用できないため、そのレコードにはAレコードを使用する必要があります。

A foo.example 192.168.1.1
A *.foo.example 192.168.1.1

OR

A foo.example 192.168.1.1
CNAME *.foo.example bar.example

OR

A foo.example 192.168.1.1
CNAME *.foo.example foo.example

次に、nginxを構成してリクエストを処理し、目的のリダイレクトを設定する必要があります。 Bart への回答 nginxの正規表現を使用したサブドメインのリダイレクト Stack Overflowから、その部分の実行方法について説明しています。

server {
    server_name ~^(?<subdomain>\w+)\.foo\.example$;
    location / {
        rewrite ^ https://$subdomain.bar.example$request_uri permanent;
    }
}

foo.exampleの前のサブドメインが照合され、変数$subdomainに格納されます。この変数は、書き換えで使用できます。これは、xxx.foo.exampleのようなURLを1つのサーバーディレクティブのみでxxx.bar.exampleに書き換えます。

ベアドメインをリダイレクトするには、別のルールも必要です。

server {
    server_name foo.example;
    location / {
        rewrite ^ https://bar.example$request_uri permanent;
    }
}
2