web-dev-qa-db-fra.com

Redirection Amazon S3 et Cloudfront

J'essaye d'installer des redirections 301 sur S3 en utilisant des objets, référencés ici http://docs.aws.Amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html . J'ai eu quelques problèmes et je n'arrive pas à comprendre ce que je fais mal.

Ce que je reçois est une page vierge (fichier de 0 octet) comme si la métadonnée "Site de redirection de site Web" n'était pas définie.

Qu'est-ce que je fais mal?

Cela fonctionne-t-il également sur AWS CloudFront?


Ma configuration de la console S3 S3 Console Setup

Quelques choses à noter:

J'ai cette configuration pour l'hébergement d'un site statique. J'utilise ssl/https avec mon propre certificat téléchargé et défini sur la distribution Cloudfront. Toutes les pages semblent fonctionner sauf les objets de redirection. J'ai essayé de mettre en place des règles de routage, mais elles ne semblaient pas fonctionner dans Cloudfront.

J'essaie d'accéder aux redirections via l'URL de Cloudfront et l'URL s3 ( https://s3.amazonaws.com/ {bucket}/users/sign_in)

59
Matt Smith

Pour les fonctionnalités de type site Web dans S3, telles que les redirections, les messages d'erreur html et les documents d'index, vous ne pouvez pas utiliser le noeud final REST (${bucket_name}.s3.amazonaws.com ou ${bucket_name}.s3.${region}.amazonaws.com) car ces fonctionnalités ne sont fournies que par les points de terminaison du site Web (${bucket_name}.s3-website.${region}.amazonaws.com).

http://docs.aws.Amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html

Pour rendre le comportement disponible dans Cloudfront, vous devez configurer Cloudfront afin qu'il utilise ce point de terminaison également, et non le REST celui proposé via la saisie semi-automatique dans la console.

Entrez le point de terminaison d'hébergement de site Web statique Amazon S3 pour votre compartiment. Cette valeur apparaît dans la console Amazon S3, sur la page Propriétés sous Hébergement statique de sites Web .

Lorsque vous spécifiez le nom du compartiment dans ce format, vous pouvez utiliser les redirections Amazon S3 et les documents d'erreur personnalisés Amazon S3.

http://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html

Notez que les points de terminaison Web ne prennent pas en charge HTTPS, mais vous pouvez configurer Cloudfront pour qu'il extrait du compartiment avec HTTP même si la connexion client est HTTPS.


Conseil utile: lors du dépannage et du test des modifications avec CloudFront, les utilisateurs sont souvent déconcertés par l'apparente "latence" entre le moment où vous apportez des modifications et le moment où CloudFront commence à présenter le nouveau comportement. Dans le cas de pages d'erreur, CloudFront a une valeur par défaut de 5 minutes Erreur lors de la mise en cache d'une durée de vie minimale qui l'empêche de renvoyer les demandes de pages en échec à l’origine, et il s’agit d’un minuteur distinct du minimum/par défaut/maximum TTL défini dans le comportement du cache. En particulier lors du test, vous souhaiterez peut-être désactiver ces minuteries et forcer une nouvelle tentative à chaque requête suivante. des pages qui ont renvoyé des erreurs, en utilisant les étapes que j'ai fournies dans la réponse à une question sur apparent Latence Amazon CloudFront .

115
Michael - sqlbot

J'ai eu le même problème avec l'échec des redirections et le téléchargement de fichiers de longueur nulle, mais je n'utilisais pas Cloudfront.

La cause principale dans mon cas était que mon enregistrement DNS CNAME indiquait le REST noeud final (static.righto.com.s3-us-west-2.amazonaws.com) au lieu du noeud final de site Web ( static.righto.com.s3 - site Web - us-west-2.amazonaws.com). La mise à jour de l'enregistrement CNAME a corrigé mes redirections.

Un autre symptôme de ce problème était que les pages manquantes affichaient une page d'erreur XML plutôt qu'une page d'erreur HTML.

Ce document explique la différence entre les points finaux de sites Web et REST points finaux.

9
Ken Shirriff

Si vous venez ici pour trouver une solution sans utiliser CloudFront, la voici:

Vous pouvez utiliser s3cmd (en script bash, bien sûr) et ses paramètres:

  • --add-header avec x-amz-website-redirect-location

Par exemple, ce script résout le problème de la page /about/:

s3cmd \
--acl-public \
--add-header "x-amz-website-redirect-location: /about/" \
--no-preserve \
put "./path/to/any/small/file/at/your/local/drive/index.html" "s3://domain.com/about"

Ce script copie certains fichier existant avec nouvea nom de fichier sans barre oblique. Peu importe ce que le fichier contient, car le navigateur sera immédiatement redirigé.

Lorsque vous (et plus important web-crawlers) essayez d’ouvrir la page /about vous recevez 301 rediriger vers /about/. Cela permet de garder le droit page en cache de Google, yandex et autres moteurs de recherche.

Vous pouvez répéter ce code pour plusieurs pages. Ou vous pouvez ajouter des fonctionnalités pour la recherche de dossiers et faire un appel pour chacun. Vous aurez probablement la gentillesse de le montrer ici :)

1
Oleg Poltoratskii