Je cherchais des moyens d'accélérer le chargement de mon site et j'aimerais explorer une meilleure utilisation de Cloudfront.
Parce que Cloudfront n'a pas été conçu à l'origine comme un CDN d'origine personnalisé et qu'il ne prend pas en charge le gzipping, je l'ai jusqu'à présent utilisé pour héberger toutes mes images, qui sont référencées par leur nom de domaine Cloudfront dans mon code de site, et optimisées avec loin -en-têtes futurs.
Les fichiers CSS et javascript, en revanche, sont hébergés sur mon propre serveur, car jusqu'à présent, j'avais l'impression qu'ils ne pouvaient pas être servis au format gzip depuis Cloudfront, et que le gain du gzipping (environ 75%) l'emporte sur celui d'utiliser un CDN (environ 50%): Amazon S3 (et donc Cloudfront) ne prend pas en charge la diffusion de contenu gzippé de manière standard en utilisant l'en-tête HTTP Accept-Encoding envoyé par les navigateurs pour indiquer leur prise en charge de la compression gzip, et ils n'ont donc pas pu Gzip et servir des composants à la volée.
Ainsi j'avais l'impression, jusqu'à présent, qu'il fallait choisir entre deux alternatives:
déplacer tous les actifs vers Amazon CloudFront et oublier GZipping;
garder les composants auto-hébergés et configurer notre serveur pour détecter les demandes entrantes et effectuer le GZipping à la volée selon les besoins, ce que j'ai choisi de faire jusqu'à présent.
Il y avait des solutions de contournement pour résoudre ce problème, mais essentiellement cela n'a pas fonctionné . [ lien ].
Il semble maintenant qu'Amazon Cloudfront prend en charge l'origine personnalisée et qu'il est désormais possible d'utiliser la méthode HTTP Accept-Encoding standard pour servir du contenu compressé si vous utilisez une origine personnalisée [ lien ].
Jusqu'à présent, je n'ai pas pu implémenter la nouvelle fonctionnalité sur mon serveur. Le billet de blog que j'ai lié ci-dessus, qui est le seul que j'ai trouvé détaillant le changement, semble impliquer que vous ne pouvez activer le gzipping (barres de contournement, que je ne veux pas utiliser), si vous optez pour une origine personnalisée, qui Je préfère ne pas: je trouve plus simple d'héberger les fichiers correspondants sur mon serveur Cloudfront et de les lier à partir de là. Malgré la lecture attentive de la documentation, je ne sais pas:
si la nouvelle fonctionnalité signifie que les fichiers doivent être hébergés sur mon propre serveur de domaine via une origine personnalisée, et si oui, quelle configuration de code y parviendra;
comment configurer les en-têtes css et javascript pour vous assurer qu'ils sont servis au format gzip depuis Cloudfront.
la source
Ma réponse est un décollage à ce sujet: http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html
En vous basant sur la réponse de skyler, vous pouvez télécharger une version gzip et non gzip des css et js. Soyez prudent en nommant et en testant dans Safari. Parce que safari ne gérera
.css.gz
ni.js.gz
fichiers.site.js
etsite.js.jgz
etsite.css
etsite.gz.css
(vous devrez définir l'en-content-encoding
tête sur le type MIME correct pour que ceux-ci fonctionnent correctement)Ensuite, dans votre page, mettez.
gzipcheck.js.jgz est juste
sr_gzipEnabled = true;
Ceci teste pour s'assurer que le navigateur peut gérer le code gzippé et fournir une sauvegarde s'il ne le peut pas.Ensuite, faites quelque chose de similaire dans le pied de page en supposant que tous vos js sont dans un seul fichier et peuvent aller dans le pied de page.
MISE À JOUR: Amazon prend désormais en charge la compression gzip. Annonce, donc ce n'est plus nécessaire. Annonce Amazon
la source
Cloudfront prend en charge le gzipping.
Cloudfront se connecte à votre serveur via HTTP 1.0. Par défaut, certains serveurs Web, y compris nginx, ne servent pas de contenu compressé aux connexions HTTP 1.0, mais vous pouvez le dire en ajoutant:
à votre configuration nginx. La configuration équivalente peut être définie pour le serveur Web que vous utilisez.
Cela a pour effet secondaire de faire en sorte que les connexions persistantes ne fonctionnent pas pour les connexions HTTP 1.0, mais comme les avantages de la compression sont énormes, cela vaut vraiment le coup.
Tiré de http://www.cdnplanet.com/blog/gzip-nginx-cloudfront/
Éditer
Servir du contenu compressé à la volée à travers le cloud d'Amazon est dangereux et ne devrait probablement pas être fait. Fondamentalement, si votre serveur Web est en train de compresser le contenu, il ne définira pas de longueur de contenu et enverra plutôt les données en bloc.
Si la connexion entre Cloudfront et votre serveur est interrompue et rompue prématurément, Cloudfront met toujours en cache le résultat partiel et le sert de version mise en cache jusqu'à son expiration.
La réponse acceptée de le compresser d'abord sur le disque puis de servir la version compressée est une meilleure idée car Nginx sera en mesure de définir l'en-tête Content-Length, et donc Cloudfront rejettera les versions tronquées.
la source
Nous avons récemment effectué quelques optimisations pour uSwitch.com afin de compresser certains des actifs statiques de notre site. Bien que nous ayons configuré un proxy nginx complet pour ce faire, j'ai également mis en place une petite application Heroku qui fait office de proxy entre CloudFront et S3 pour compresser le contenu: http://dfl8.co
Étant donné que les objets S3 accessibles au public sont accessibles à l'aide d'une structure d'URL simple, http://dfl8.co utilise simplement la même structure. C'est-à-dire que les URL suivantes sont équivalentes:
la source
Hier, Amazon a annoncé une nouvelle fonctionnalité, vous pouvez maintenant activer gzip sur votre distribution.
Cela fonctionne avec s3 sans ajouter de fichiers .gz vous-même, j'ai essayé la nouvelle fonctionnalité aujourd'hui et cela fonctionne très bien. (vous devez cependant invalider vos objets actuels)
Plus d'informations
la source
Vous pouvez configurer CloudFront pour compresser automatiquement les fichiers de certains types et servir les fichiers compressés.
Voir le Guide du développeur AWS
la source