RRSet типа CNAME с DNS-именем foo.com. не разрешается на вершине в зоне bar.com
Я владею foo.com и bar.com. Я управляю обоими в Route53. foo.com размещен мой сайт, и я хотел бы направить трафик с bar.com до foo.com. Я пытался настроить CNAME рекорд bar.com указывая на foo.com, но я получил сообщение об ошибке:
RRSet of type CNAME with DNS name foo.com. is not permitted at apex in zone bar.com.
почему это не работает, и что я могу сделать вместо этого?
5 ответов:
согласно разделу 2.4 RFC1912:
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 ARFC имеет смысл, поскольку сервер имен не знает, нужно ли ему следовать CNAME или отвечать с фактической записью, с которой пересекается CNAME.
bar.com- это зона, поэтому она неявно имеет запись SOA дляbar.comимя. Вы не можете иметь как запись SOA, так и CNAME с тем же именем.однако, учитывая, что записи SOA обычно используются только для обслуживания зоны, эти ситуации, когда вы хотите предоставление CNAME на вершине зоны довольно распространено. Несмотря на то, что RFC запрещает это, многие инженеры хотели бы такое поведение, как: "следуйте CNAME, если запрос явно не запрашивает запись SOA". Вот почему маршрут 53 обеспечивает
alias records. Это специфическая функция Route 53, которая предлагает точную функциональность, которую вы требуете. Взгляните на http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html
- создайте ведро S3 под названием
bar.com. (Имя должно совпадать с доменом, который вы хотите перенаправить, чтобы это работало!)- на
bar.comведро S3 перейти кProperties>Static Website HostingвыберитеRedirect all requests to another host nameи вводимfoo.comв текстовое поле.- назад в маршрут 53, в ваш
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 запись Не a CNAME запись, и создать псевдоним под этим.
из комментария @ewalshe к ответу Александру Куку, если вы пришли сюда, пытаясь настроить API Gateway с пользовательским доменным именем и иметь url-адрес распространения Cloudfront.
вы должны использовать DNAME вместо CNAME. Запись CNAME может только перенаправить метку на другую метку.
когда вы говорите о перенаправлении доменных имен вместо меток, вы должны использовать DNAME
$ORIGIN bar.com IN DNAME foo.comЭто также означает, что все a, NS и любые другие записи должны быть удалены. Это должно быть настроено в foo.com домен.
tldr; вы должны передать полное доменное имя в качестве имени ResourceRecordSet.
у меня была такая же проблема, используя этот оператор 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 = = "слушатель"
Как только я изменил его на:
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"
Он работает сейчас.