web-dev-qa-db-fra.com

Amazon CloudFront ne respecte pas les règles index.html de mon site Web S3

J'héberge un site Web statique sur Amazon S3 en utilisant l'option d'hébergement de site Web statique, de sorte que S3 rendra un dossier sans me faire pointer explicitement vers mon fichier index.html.

Par exemple, voici un lien direct vers une page de mon compartiment S3: http://new.rdegges.com.s3-website-us-east-1.amazonaws.com/category/2009/ = Comme vous pouvez le voir, lorsque vous visitez cette URL, Amazon S3 rend automatiquement le fichier index.html à l'intérieur de ce répertoire, ce qui me permet d'avoir des URL propres.

Tout cela fonctionne bien sur S3. Le problème que j'ai est d'obtenir qu'Amazon Cloudfront gère également correctement ce comportement. Lorsque je crée une distribution Cloudfront avec mon compartiment S3 spécifié comme origine et que je lui dis d'utiliser 'index.html' en tant que racine, le comportement index.html que S3 a vient de cesser de fonctionner tous ensemble.

Par exemple, voici ma même URL que ci-dessus sur Cloudfront: http://d1mj00c6pby3gc.cloudfront.net/category/2009/

Malheureusement, l'URL ci-dessus ne fonctionne pas, mais si je spécifie manuellement le fichier d'index, cela fonctionne, par exemple: http://d1mj00c6pby3gc.cloudfront.net/category/2009/index.html

Ma question est: comment dois-je configurer Cloudfront pour qu'il respecte mes paramètres de compartiment S3 pour mon site Web?

69
rdegges

Les fonctionnalités du site Web S3 peuvent être utilisées conjointement avec Amazon CloudFront. Cependant, le site Web S3 utilise un nom de domaine différent de celui des compartiments S3 standard. Dans ce cas, vous devrez définir le Origin Domain Name de la configuration d'origine de votre distribution CloudFront à new.rdegges.com.s3-website-us-east-1.amazonaws.com.

Vous pouvez prendre cette URL (Endpoint) à partir du panneau Hébergement de site Web statique sur S3:

Static Website Hosting panel on S3

Une fois que CloudFront pointe vers le nom de domaine du site Web S3, les fonctionnalités du site Web S3 devraient fonctionner.

109
Wade Matveyenko

Je voudrais ajouter quelques éléments à la réponse acceptée.

Tout d'abord, assurez-vous que vous disposez d'un Default Root Object sur votre front de nuages. Comme spécifié dans documentation , cela ne s'applique pas à subdirectories.

Lors de la configuration d'une nouvelle distribution de cloudfront, il vous permettra de sélectionner votre compartiment bucket-name.s3.amazonaws.com. Notez que la région n'est pas spécifiée dans l'URL. Ce que vous devez faire est de récupérer l'URL du site statique de s3 et de l'utiliser comme Origin url (la région sera là).

17
Michael Yagudaev

Cela pourrait être tard dans le jeu, mais consultez Lambda @ Edge . Vous pouvez intercepter les demandes d'origine sans extension et les pointer vers le document index.html dans le dossier. Ces résultats sont mis en cache, donc la Lambda n'est exécutée que lorsqu'elle reçoit une nouvelle demande.

2