Fastly, CloudFlare et quelques autres CDN offrent un mode où ils accélèrent le contenu dynamique.
En bref, vous pointez l’adresse IP de votre domaine vers le CDN et le CDN décidera intelligemment comment gérer la requête.
- Le contenu statique peut être facilement servi depuis le cache
- Le contenu dynamique peut être acheminé vers le site.
Ceci offre quelques avantages par rapport à la seule livraison d’assets statiques, ce qui est couvert dans le guide du CDN.
- Vous pouvez choisir le « shielding » qui protège votre site contre les pics de trafic.
- Le contenu dynamique peut être accéléré en utilisant des techniques comme la compression delta. (note : en général, notre charge utile tient dans 1 RTT, donc cela a moins d’impact)
- La négociation SSL peut se faire en périphérie, réduisant les allers-retours coûteux pour la négociation.
Si vous activez l’accélération complète du site avec un CDN, il est essentiel de suivre 3 règles
-
Le « message bus » doit être servi depuis l’origine.
-
Vous devez configurer la confiance X-Forwarded-For. Pour Cloudflare, ajoutez
cloudflare.template.ymlà votre fichierapp.yml. -
Soyez extrêmement prudent avec les techniques qui appliquent une optimisation au site, des choses comme Rocket Loader peuvent empêcher Discourse de fonctionner. Discourse est déjà fortement optimisé, ce n’est pas nécessaire.
Pour servir les requêtes de « long polling » à partir d’un domaine différent, définissez le paramètre de site masqué long_polling_base_url sur le serveur d’origine. Il est préférable de le configurer en ajoutant la variable d’environnement DISCOURSE_LONG_POLLING_BASE_URL dans votre app.yml, ou via la console Rails.
Par exemple, si votre site est sur « http://forum.example.com », vous devriez configurer http://forum-direct.example.com/ pour qu’il se connecte au paramètre du site. Si vous ne le faites pas, votre site sera cassé.
Si vous utilisez Varnish comme frontal pour Discourse, vous voudrez probablement suivre la même astuce ici et contourner Varnish pour les requêtes du message bus.
Notes techniques ennuyeuses :
Atteindre un message bus fonctionnel sur un domaine complètement différent est assez difficile. Notre message bus est conscient de quel utilisateur est en train de « poller », l’autre domaine peut ne pas avoir de cookie configuré, donc sans modification, il y a deux problèmes. Premièrement, vous ne pouvez même pas effectuer des requêtes ajax standard inter-domaines sans une énorme danse CORS.
Deuxièmement, nous avions besoin d’un mécanisme pour informer l’autre domaine de qui est l’utilisateur afin que nous puissions « poller » pour les informations correctes.
Lorsque l’URL de base du « long polling » est modifiée, Discourse expédie une balise méta supplémentaire qui partage un jeton d’authentification « inter-domaine ». Ce jeton est transmis via un en-tête personnalisé au message bus. Le jeton expire après 7 jours ou dès que l’utilisateur se déconnecte.
Vous pouvez voir la majeure partie de l’implémentation ici : FEATURE: allow long polling to go to a different url · discourse/discourse@aa9b3bb · GitHub

