2013-02-21 3 views
2

J'utilise s3 pour héberger un site web statique. Ce site est placé dans s3 seau et distribué par cloudfront. Tout fonctionne bien, mais nous sommes confrontés à des problèmes lorsque nous avons besoin de modifier des fichiers spécifiques. Si nous modifions le fichier index.html dans le compartiment s3, nous n'obtenons pas le dernier fichier de cloudfront. Dois-je définir l'heure d'expiration sur s3 pour ces fichiers statiques et seulement après l'expiration du délai, cloudfront recherchera-t-il la nouvelle version du fichier et distribuera-t-il les nouveaux fichiers?S3, cloudfront et date d'expiration

Répondre

1

CloudFront utilise l'en-tête Cache-Control et Expires envoyé par le serveur d'origine pour décider si une ressource doit être stockée dans le cache et pendant combien de temps elle est considérée comme fraîche. Si vous ne contrôlez pas la mise en cache via les en-têtes de réponse, CF considérera chaque ressource comme obsolète après 24 heures d'extraction. En option, vous pouvez configurer une distribution pour ignorer les en-têtes de contrôle de cache et utiliser un délai d'expiration pour chaque ressource que vous spécifiez. Lorsque vous mettez à jour un fichier à l'origine, CF n'essaie pas d'actualiser sa copie avant son expiration.

Vous pouvez suivre différentes stratégies pour que CF mette à jour les copies mises en cache.

1) Le moins efficace et non recommandé est l'utilisation invalidation. Vous pouvez le faire via la console AWS ou l'API.

2) Dites à CF de rechercher le contenu mis à jour en envoyant des en-têtes Expires. Par exemple, si vous avez une politique stricte pour déployer un nouveau contenu/version sur votre site Web et que vous savez que vous déployez un déploiement presque tous les jeudis, vous pouvez envoyer un en-tête Expires avec chaque ressource de votre origine à la prochaine date de déploiement prévue . (Cela ne fonctionnera probablement pas avec les origines S3.)

3) Le moyen le plus efficace et recommandé est d'utiliser versioned URLs. Une bonne pratique pourrait être d'inclure la dernière heure modifiée de la ressource dans son URI d'accès. Avec EC2 ou d'autres origines capables de servir du contenu dynamique, c'est assez facile, avec une origine S3, ce n'est pas si simple que ça.

Par conséquent, je recommande d'invalider les ressources mises à jour.

+0

Bonjour, pouvons-nous mettre Cache-Control à non-cache pour les fichiers html et cloudfront prendra-t-il toujours les derniers fichiers html? – Yalamber

+0

Tout d'abord, je ne suis pas sûr de savoir comment contrôler les en-têtes dans une réponse envoyée par S3. Cela ne veut pas dire que ce n'est pas possible, je n'ai jamais utilisé S3. Mais plus important encore, si votre S3 envoie toujours un en-tête 'Cache-Control: no-cache', il dit à CF_not_ de stocker la ressource donnée donc chaque fois qu'il est demandé à CF, il transmettra la requête à l'origine pour obtenez-le pour que vous ne profitiez pas du tout du nuage. – marekful

+0

Je prévois d'héberger un site de blog sur s3 et cf mais certains fichiers comme la page d'accueil et certaines pages de catégories devront être mis à jour fréquemment d'autres pages comme les pages individuelles du blog ne changeront pas souvent je peux le mettre en cache mais certains html des fichiers comme la page d'accueil et les pages de catégories Je ne veux pas être mis en cache mais obtenir des fichiers à chaque fois. – Yalamber

1

Il semble que vous devez définir les méta-données sur le côté s3:

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html

La meilleure façon que je trouve à faire est d'utiliser BucketExplorer and go « Opération batch », « Mise à jour des métadonnées » , "Ajouter des métadonnées", puis ajoutez "Cache-Control: max-age = 604800, public" une période de cache de 1 semaine.

Questions connexes