web-dev-qa-db-fra.com

Redirection AWS Cloudfront vers le compartiment S3

J'ai créé une distribution cloudfront pour servir le site Web statique. S3 est le serveur d'origine. Maintenant, si nous accédons à l'URL cloudfront, il redirige vers l'emplacement S3.

d2s18t7gwlicql.cloudfront.net ou test.telekha.in

Dans le navigateur, il affiche https://telekha-test-www.s3.ap-south-1.amazonaws.com/index.html#/dashboard

j'attends https://test.telekha.in/#/dashboard

Si j'accède https://test.telekha.in via curl, il renvoie mon document index.html

Si j'accède http://test.telekha.in via curl, il renvoie

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>

Mais dans le navigateur, http et https redirigent vers https://telekha-test-www.s3.ap-south-1.amazonaws.com/index.html#/

Veuillez me faire savoir comment résoudre ce problème.

19
Rajneesh

J'ai trouvé le problème. C'est avec une configuration cloudfront. Ce blog m'a aidé.

Lors de la définition de l'origine, j'ai directement sélectionné le compartiment S3. Nous devons entrer dans le domaine du compartiment S3 comme telekha-test-www.s3-website.ap-south-1.amazonaws.com

20
Rajneesh

La première chose à vérifier si vous pensez voir cela est d'exécuter la commande curl ci-dessous. S'il renvoie HTTP/1.1 307 Temporary Redirect, vous voyez alors ce problème.

$ curl -I https://YOUR_CF_DOMAINNAME.cloudfront.net/

HTTP/1.1 307 Temporary Redirect
Content-Type: application/xml
Content-Length: 0
Connection: keep-alive
x-amz-bucket-region: ap-southeast-2
Location: http://yourS3bucketname.s3-ap-southeast-2.amazonaws.com/
Date: Wed, 12 Jul 2017 00:20:27 GMT
Server: AmazonS3
Age: 1775
X-Cache: Hit from cloudfront
Via: 1.1 someid.cloudfront.net (CloudFront)
X-Amz-Cf-Id: someguid==

La meilleure description que j'ai trouvée de ce problème est:

S3 met à jour le DNS pour la hiérarchie globale REST endpoint * .s3.amazonaws.com avec un enregistrement envoyant des demandes à la bonne région pour le compartiment dans un court laps de temps après la création du compartiment, et CloudFront semble s'appuyer sur à ce sujet pour envoyer les demandes au bon endroit. Avant que la mise à jour initiale soit terminée, S3 renverra une redirection et CloudFront renvoie cette redirection vers le navigateur. ~ michael-sqlbot

Étant donné que ce problème est en fait dû à la propagation DNS interne du nom du compartiment S3 (qui n'est pas clair à 100%, mais semble très probable) qui se produit lorsque vous configurez le compartiment dans S3, il devrait être possible d'éviter ce problème en configurant un site Web public dans S3 avant de configurer la distribution Cloudfront, et selon doco , configurez le nom du site Web public S3 en tant qu'origine cloudfront plutôt que le nom de compartiment s3.

Pour référence, j'ai à la fois des noms de compartiment S3 et des noms de sites Web S3 configurés en tant qu'origines Cloudfront et je peux dire qu'ils fonctionnent tous les deux! (finalement?)

Les références:

19
Simon Hutchison

Il s'avère que ce n'est qu'un problème de synchronisation qui se résout après un certain temps si tout est correctement configuré. Plus d'informations peuvent être trouvées dans this fil de discussion AWS.

Réponse actuelle acceptée ici et liée article de blog suggère d'activer le site Web statique pour votre compartiment S3, puis de modifier l'origine CF pour pointer vers ce site Web statique. Cette solution résout le problème de redirection, mais avec l'effet secondaire que votre site Web est maintenant disponible en utilisant à la fois l'URL CF ou votre CNAME personnalisé ainsi que l'URL S3.

7
Kiril

Pour développer la réponse acceptée, cette partie à la fin de l'article de blog référencé en particulier est utile:

J'ai trouvé un subtil "bug" il y a quelques jours: lors de l'utilisation d'URL comme www.example.com/about/, Amazon S3 renverra en fait le fichier "index.html" à l'intérieur du dossier (car il est configuré comme un compartiment de site Web statique ).

Le plus drôle, c'est que si vous omettez la barre oblique (www.example.com/about), S3 vérifiera d'abord si un objet appelé "about" existe. Si ce n'est pas le cas, il considérera que about est un dossier et émettra une redirection 301 vers about /. Lorsque vous utilisez CloudFront, cela signifie que CloudFront va en fait mettre en cache… la redirection au lieu du fichier lui-même! Par conséquent, vous devez vous assurer que toutes vos URL se terminent par une barre oblique de fin pour éviter une redirection inutile.

0
DILP