CloudFront ne met pas en cache les fichiers statiques

Bonjour.

J’ai configuré une installation de Discourse version v2.3.0.beta2 sur AWS.

Cette pièce jointe montre comment je l’ai déployée. J’utilise l’image Docker officielle pour chaque instance du groupe de mise à l’échelle automatique.

J’ai deux distributions CloudFront :
L’une (cdn.civicxclub.com) pointant vers les buckets S3 pour servir les images téléchargées directement via le CDN. CELA FONCTIONNE.
L’autre (civicxclub.com) pointant vers l’équilibreur de charge, afin de servir l’application et tous les fichiers statiques depuis celui-ci. CELA NE FONCTIONNE PAS.

Voici la configuration des comportements que j’ai mise en place :

Le comportement par défaut a l’option « Mise en cache basée sur les en-têtes de requête sélectionnés » définie sur Tous afin d’éviter la mise en cache depuis le backend.
Tous les autres ont cette option définie sur Liste blanche et je mets en liste blanche les en-têtes Host, Origin et Referer.

Lorsque j’accède au site web via un navigateur et que j’inspecte les en-têtes d’un avatar par exemple, il est toujours indiqué « Miss from CloudFront ». Cependant, lorsque j’accède au fichier deux fois directement depuis le navigateur, il est indiqué « Hit from CloudFront ». La mise en cache fonctionne donc, mais pas lors du chargement des fichiers depuis la page web du forum.

La variable Discourse CDN est définie comme suit :

  DISCOURSE_CDN_URL: https://civicxclub.com

Des idées ?

Merci d’avance, cordialement.

You’re doing it wrong!

You need to split the container into Data and Web or you can use RDS for Postgresql to host data and load-balance among the web containers.

Also, It is not recommended to use cloudflare optimizations as they cause many issues.

And You need to set up your cloudfront URL in the discourse CDN field not the name of the server.

I deploy the web only container on the EC2 servers. The database is outside, on an RDS instance, as well as the Redis.

I have a CloudFront for uploads (the setting is on admin panel, and it works) and other for serving the whole webpage.

Now, I’m looking into the static headers, and it seems to work, some files yes, some don’t.

DISCOURSE_CDN_URL should be different from the DISCOURSE_HOSTNAME. Use a dedicated URL for the CDN.

Also, in our experience making all traffic go into the cloudfront tunnel increases the latency.

4 « J'aime »

Nobody said anything about cloudflare. Read more closely?

1 « J'aime »

Maybe I mis-read title as cloudflare.

2 « J'aime »

How can I then serve avatars, css and js files from this CDN if they are stored on the server??
I’ve tried to use the cdn.civicxclub.com url which is mapping to the S3 bucket and add all the behaviours related to discourse static content, and it failed.

Please read our CDN guide:

3 « J'aime »