foo.example
とbar.example
があります。 sub.foo.example
をsub.bar.example
(asdf.foo.example
やasdf.bar.example
など)と同じようにすべてのサブドメインにリダイレクト(エイリアスは使用しない)します。
ワイルドカードDNSレコードを使用して、foo.example
のすべてのサブドメインをbar.example
の特定のサブドメインにリダイレクトできることを知っています(たとえば、sub.foo.example
とasdf.foo.example
はどちらもwww.bar.example
に移動します)。 。
これは可能ですか?
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;
}
}