J'essaie de faire quelque chose qui devrait être relativement simple - je veux configurer quelques domaines et sous-domaines pour rediriger vers le domaine principal de notre site, mais je veux mettre les redirections sur Cloudfront. Tout fonctionne sauf la redirection du chemin racine - cela me donne un fichier XML décrivant en partie le compartiment S3.
Contexte
S3
S3 vous permet de configurer un compartiment entièrement redirigé , comme:
En testant cela, le point de terminaison Web (brass9-com.s3-website-us-west-1.amazonaws.com) fait ce qu'il doit - il redirige vers brass9.com. Bien.
Cloudfront
Cloudfront vous permet de pointer vers un compartiment S3, mais la façon dont il vous suggère de le faire est incorrecte - au lieu de pointer le compartiment par son nom, comme brass9-com.s3.amazonaws.com, vous devez utiliser le point de terminaison Web ci-dessus. En dehors de cela, vous pouvez tout laisser à ses valeurs par défaut et obtenir un bon comportement de redirection. Ainsi, un chemin comme www.brass9.com/portfolio redirige correctement là où il devrait. Bien aussi.
Le problème - la redirection du domaine racine
La seule chose qui ne fonctionne pas ensuite est la redirection depuis le site www.brass9.com . Au lieu de vous rediriger, vous obtenez ce résultat étrange:
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>brass9-com</Name><Prefix></Prefix>
<Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>
</ListBucketResult>
D'ACCORD... . Ce n'est donc pas complètement inattendu - car il n'y a pas d'objet racine par défaut. Mais quel objet racine par défaut puis-je éventuellement spécifier pour empêcher ce comportement? Quel est le nom de l'objet de redirection S3, le cas échéant, vers lequel je dois pointer? Ou existe-t-il une autre configuration appropriée, ou s'agit-il simplement d'un bug dans la façon dont Cloudfront et S3 interagissent qu'Amazon doit corriger?
Solution non fonctionnelle connue: objet racine par défaut
Il est possible de spécifier un objet racine par défaut d'index.html, mais cela n'aide pas du tout - cela ne fait que changer le problème. L'url Cloudfront redirige à la place vers /index.html sur le site principal, qui est un 404 (nous n'utilisons pas de fichier index.html, c'est un site géré par le framework côté serveur). Je pourrais mettre un index.html sur le serveur, mais cela vainc le petit gain de vitesse de l'utilisation de Cloudfront en premier lieu.
Questions similaires
Une question demande quelque chose de similaire, mais renvoie une réponse vide de 0 octet pour une raison quelconque au lieu de ce que je vois, une réponse XML. Il ne comprend pas de question sur ce problème ni de résolution.
Articles Liés
Un article vous propose de servir l'ensemble du site sur le domaine nu et www . Cette vis avec les signets de n'importe quel utilisateur, votre classement de recherche, etc., etc. Vous ne devriez pas faire cela.
Plusieurs discutent de l' hébergement d'un site Web statique sur S3 et Cloudfront plutôt que d'un schéma de redirection, et ne sont donc pas liés.
Alors, comment dois-je procéder correctement?
Capture d'écran de la configuration Cloudfront - pas d'objet racine par défaut, pointant vers l'origine S3. Ignorez InProgress - je venais d'activer et de désactiver l'objet racine par défaut pour tester.
Et la configuration d'origine pour cette distribution:
la source
GET /
depuis avant de corriger votre configuration pour utiliser le point de terminaison Web.Réponses:
Si vous rencontrez ce problème, vérifiez d'abord lorsque vous configurez l'origine du compartiment s3 pour le cloudfront, la saisie semi-automatique renvoie le point de terminaison s3 REST domain.amazonaws.com qui renvoie cette réponse ListBucketResult.
Vous devez noter manuellement le point final du site web domain.s3-website-region.amazonaws.com
Important: si vous avez mal configuré cloudfront avec le point de terminaison REST, vous devez invalider le cache via les invalidations ou il continuera à renvoyer la réponse REST
la source
origin
bloc de la distribution, utilisezaws_s3_bucket.BUCKET.website_endpoint
dansdomain_name
(pasbucket_regional_name
) et ajoutez lecustom_origin_config
bloc.Solution: configurez la redirection comme indiqué dans la question, puis attendez les heures de cache S3 et CloudFront. Ils peuvent durer 4 heures ou plus, il vous suffit donc de tout régler, puis d'attendre et d'espérer le meilleur.
(Ceci est la solution de Michael dans les commentaires, mais cela fait maintenant des années et cela méritait vraiment d'être marqué comme répondu).
la source
Écrire comme réponse car je ne peux pas commenter - à partir de la documentation à http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DistributionConfigDatatype.html#DistributionConfigDatatype_Elements, il semble que vous puissiez avoir un objet racine par défaut vide:
la source