Je possède foo.com
et bar.com
. Je gère les deux dans Route53. foo.com
héberge mon site et j'aimerais diriger le trafic de bar.com
à foo.com
. J'ai essayé de créer un enregistrement CNAME
pour bar.com
pointant vers foo.com
, mais j'ai le message d'erreur suivant:
RRSet of type CNAME with DNS name foo.com. is not permitted at apex in zone bar.com.
Pourquoi cela ne fonctionne-t-il pas et que puis-je faire à la place?
Conformément à la section 2.4 de la 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 A
La RFC est parfaitement logique car le serveur de noms ne sait pas s'il doit suivre le CNAME ou répondre avec l'enregistrement réel avec lequel CNAME se chevauche. bar.com
est une zone et a donc implicitement un enregistrement SOA pour l’enregistrement bar.com
Nom. Vous ne pouvez pas avoir à la fois un enregistrement SOA et un CNAME du même nom).
Toutefois, étant donné que les enregistrements SOA sont généralement utilisés uniquement pour la maintenance de zone, les situations dans lesquelles vous souhaitez fournir un CNAME au sommet de la zone sont assez courantes. Même si la RFC l’interdit, de nombreux ingénieurs comme un comportement tel que: "suivez le CNAME sauf si la requête demande explicitement l'enregistrement SOA enregistrement"). C'est pourquoi Route 53 fournit alias records
. Il s’agit d’une fonctionnalité spécifique à Route 53 qui offre la fonctionnalité exacte dont vous avez besoin. Regardez http://docs.aws.Amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html
bar.com
. (Le nom doit être identique au domaine que vous souhaitez rediriger pour que cela fonctionne!)bar.com
S3 Bucket aller à Properties
> Static Website Hosting
, sélectionnez Redirect all requests to another Host name
et entrez foo.com
dans la zone de texte.Hosted Zone
pour bar.com
, Cliquez sur Create Record Set
. Sélectionnez A - IPv4 address
pour le type. Cliquez sur Yes
pour Alias
. Cliquez sur la zone de texte pour Alias Target
. bar.com
devrait figurer sous -- S3 Website Endpoints --
. Enregistrez l'enregistrement. Attendez quelques minutes et vous devriez avoir une configuration de redirection pour rediriger les demandes de bar.com vers foo.com.Vous pouvez utiliser cette même méthode pour rediriger un domaine nu vers un sous-domaine (comme www). J'utilise ceci dans les cas où www.foo.com doit être un CNAME, donc je redirige de foo.com vers www.foo.com avec la même méthode. Si foo.com est un enregistrement A, vous pouvez utiliser cette technique pour rediriger de www.foo.com vers foo.com.
Remarque: cette méthode transmettra avec le chemin complet. c'est-à-dire http://bar.com/test sera transféré à http://foo.com/test .
Sur Route53, vous devez créer un enregistrement A SAUF un enregistrement CNAME , et créer un alias sous cela.
Commentaire de @ ewalshe sur la réponse d'Alexandru Cucu, si vous êtes venu ici pour essayer de configurer API Gateway avec un nom de domaine personnalisé et de disposer d'une URL de distribution Cloudfront.
tldr; Vous devez passer un nom de domaine complet sous le nom ResourceRecordSet.
J'ai eu ce même problème en utilisant cette déclaration 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);
}
Dans ce cas, image.Name == "Listener"
Une fois que je l'ai changé pour:
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);
}
maintenant la valeur transmise est: "Listener.fully.qualified.com"
Ça fonctionne maintenant.
Vous devez utiliser le nom DNAME au lieu d'un nom CNAME. Un enregistrement CNAME peut uniquement rediriger l'étiquette vers une autre étiquette.
Lorsque vous parlez de la redirection de noms de domaine au lieu d’étiquettes, vous devez utiliser DNAME
$Origin bar.com
IN DNAME foo.com
Cela signifie également que tous les A, NS et tous les autres enregistrements doivent être supprimés. Ils doivent être configurés dans le domaine foo.com.