私はfoo.com
とbar.com
を所有しています。 Route53で両方を管理しています。 foo.com
が私のサイトをホストしているので、bar.com
からfoo.com
にトラフィックを誘導したいと思います。 bar.com
を指すfoo.com
のCNAME
レコードを設定しようとしましたが、エラーメッセージが表示されました。
RRSet of type CNAME with DNS name foo.com. is not permitted at apex in zone bar.com.
なぜこれが機能しないのですか、代わりに何ができますか?
RFC1912セクション2.4に従って:
A CNAME record is not allowed to coexist with any other data. In
other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you
can't also have an MX record for suzy.podunk.edu, or an A record, or
even a TXT record. Especially do not try to combine CNAMEs and NS
records like this!:
podunk.xx. IN NS ns1
IN NS ns2
IN CNAME mary
mary IN A
ネームサーバーは、CNAMEを追跡する必要があるのか、CNAMEが重複する実際のレコードで回答するのかを知らないため、RFCは完全に理にかなっています。 bar.com
はゾーンであるため、bar.com
名のSOAレコードを暗黙的に持っています。 SOAレコードと同じ名前のCNAMEの両方を持つことはできません。
ただし、SOAレコードは一般にゾーンのメンテナンスにのみ使用されるため、ゾーンの頂点でCNAMEを提供したいこれらの状況は非常に一般的です。 RFCでは禁止されていますが、多くのエンジニアは、「クエリが明示的にSOA_レコードを要求しない限り、CNAMEに従う」などの動作を希望します。 Route 53がalias records
を提供するのはそのためです。これらは、必要な正確な機能を提供するRoute 53固有の機能です。 http://docs.aws.Amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html をご覧ください
bar.com
というS3バケットを作成します。 (これが機能するためには、名前はリダイレクトしたいドメインと同じでなければなりません!)bar.com
S3バケットでProperties
> Static Website Hosting
に移動し、Redirect all requests to another Host name
を選択して、テキストボックスにfoo.com
と入力します。Hosted Zone
のbar.com
で、[Create Record Set
]をクリックします。タイプとしてA - IPv4 address
を選択します。 Yes
のAlias
をクリックします。 Alias Target
のテキストボックスをクリックします。 bar.com
は-- S3 Website Endpoints --
の下にリストする必要があります。レコードを保存します。数分待ってから、bar.comからfoo.comにリクエストをリダイレクトするリダイレクト設定が必要です。この同じ方法を使用して、ネイキッドドメインをサブドメイン(wwwなど)にリダイレクトできます。 www.foo.comをCNAMEにする必要がある場合にこれを使用し、foo.comからwww.foo.comに同じ方法でリダイレクトします。 foo.comがAレコードの場合、この手法を使用してwww.foo.comからfoo.comにリダイレクトできます。
注:このメソッドはフルパスで転送されます。つまり http://bar.com/test は http://foo.com/test に転送されます。
Route53では、AレコードではなくCNAMEレコードを作成し、その下にエイリアスを作成する必要があります。
Alexandru Cucuの答えに対する@ewalsheのコメントから、カスタムドメイン名を使用してAPI Gatewayをセットアップし、CloudfrontディストリビューションURLを取得しようとしてここに来た場合。
tldr; ResourceRecordSet名としてFQDNを渡す必要があります。
私はこのステートメントを使用して同じ問題を抱えていましたc#snip:
private static void RegisterHostWithDns(IAmazonRoute53 ec2,SynoviaImage image)
{
var changeBatch = new ChangeBatch();
var rRs = new ResourceRecordSet(image.Name, RRType.CNAME) {TTL=60,ResourceRecords = new List<ResourceRecord>() { new ResourceRecord(image.PublicDns)} };
var change = new Change(ChangeAction.UPSERT, rRs);
changeBatch.Changes.Add(change);
var request = new ChangeResourceRecordSetsRequest(ConfigurationManager.AppSettings["DnsZoneId"], changeBatch);
var response = ec2.ChangeResourceRecordSets(request);
Console.WriteLine("Updated CNAME For {0} setting {1}",image.Name,image.PublicDns);
}
この場合、image.Name == "Listener"
変更したら:
private static void RegisterHostWithDns(IAmazonRoute53 ec2,SynoviaImage image)
{
var changeBatch = new ChangeBatch();
var rRs = new ResourceRecordSet(string.Format("{0}.{1}",image.Name, "testing.foo.bar.com"), RRType.CNAME) {TTL=60,ResourceRecords = new List<ResourceRecord>() { new ResourceRecord(image.PublicDns)} };
var change = new Change(ChangeAction.UPSERT, rRs);
changeBatch.Changes.Add(change);
var request = new ChangeResourceRecordSetsRequest(ConfigurationManager.AppSettings["DnsZoneId"], changeBatch);
var response = ec2.ChangeResourceRecordSets(request);
Console.WriteLine("Updated CNAME For {0} setting {1}",image.Name,image.PublicDns);
}
渡される値は次のとおりです。「Listener.fully.qualified.com」
今は動作します。
CNAMEの代わりにDNAMEを使用する必要があります。 CNAMEレコードは、ラベルを別のラベルにのみリダイレクトできます。
ラベルではなくドメイン名のリダイレクトについて話すときは、DNAMEを使用する必要があります
$Origin bar.com
IN DNAME foo.com
これは、すべてのA、NSおよびそれ以上のレコードを削除する必要があることも意味します。これは、foo.comドメインで構成する必要があります。