답변:
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
RFC는 네임 서버가 CNAME을 따라야하는지 또는 CNAME이 겹치는 실제 레코드로 응답해야하는지 여부를 알지 못하기 때문에 완벽합니다. 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을 살펴보십시오.
A
기록이 있습니다. 지금 어떻게해야합니까?
bar.com
. (이 작업을 수행하려면 이름이 리디렉션하려는 도메인과 동일해야합니다!)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로 전달됩니다 .
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 도메인에서 구성해야합니다.
DNAME
RFC 2672에 정의되어 있습니다. 이것이 OP와 어떤 관련이 있는지 설명해 주시겠습니까? Route53은 최소한 표준 인터페이스에서 SOA 또는 NS 레코드 삭제를 허용하지 않으며 DNAME은 사용 가능한 옵션이 아닙니다.