Fastly, CloudFlare e alcune altre CDN offrono una modalità in cui accelerano i contenuti dinamici.
In sintesi, si punta l’indirizzo IP del dominio alla CDN e la CDN deciderà in modo intelligente come gestire la richiesta.
- I contenuti statici possono essere facilmente serviti dalla cache
- I contenuti dinamici possono essere instradati al sito.
Ciò offre alcuni vantaggi rispetto alla sola spedizione di risorse statiche, trattati in questa guida alle CDN.
- È possibile optare per lo “shielding” che protegge il sito dagli picchi di traffico.
- Il contenuto dinamico può essere accelerato utilizzando tecniche come la compressione delta. (nota: in generale il nostro payload rientra in 1 RTT, quindi questo ha meno impatto)
- La negoziazione SSL può avvenire al margine (edge), riducendo costosi round trip per la negoziazione.
Se si abilita l’accelerazione completa del sito con una CDN, è fondamentale seguire 3 regole
-
Il “message bus” deve essere servito dall’origine.
-
È necessario impostare la fiducia (trust) di X-Forwarded-For. Per Cloudflare, aggiungere
cloudflare.template.ymlal fileapp.yml. -
Fare molta attenzione alle tecniche che applicano ottimizzazioni al sito; cose come Rocket Loader possono impedire a Discourse di funzionare. Discourse è già pesantemente ottimizzato, questo non è necessario.
Per servire le richieste di “long polling” da un dominio diverso, impostare l’impostazione nascosta del sito long_polling_base_url sul server di origine. La configurazione migliore è aggiungendo la variabile d’ambiente DISCOURSE_LONG_POLLING_BASE_URL nel proprio app.yml, o tramite la console Rails.
Ad esempio, se il sito è su “http://forum.example.com”, si dovrebbe impostare http://forum-direct.example.com/ per collegarsi all’impostazione del sito. Se non lo si fa, il sito risulterà non funzionante.
Se si sta utilizzando Varnish davanti a Discourse, probabilmente si vorrà seguire lo stesso trucco qui e bypassare Varnish per le richieste del message bus.
Note tecniche noiose:
Ottenere un message bus funzionante su un dominio completamente diverso è piuttosto impegnativo. Il nostro message bus è a conoscenza di quale utente sta effettuando il polling, l’altro dominio potrebbe non avere cookie impostati, quindi, se non toccato, ci sono due problemi. In primo luogo, non è possibile effettuare richieste ajax standard tra domini senza una grande danza CORS.
In secondo luogo, avevamo bisogno di un meccanismo per informare l’altro dominio chi è l’utente in modo da poter effettuare il polling per le informazioni corrette.
Quando viene modificato l’URL base del long polling, Discourse invia un meta tag extra che condivide un token di autenticazione “cross domain”. Questo token viene passato utilizzando un header personalizzato al message bus. Il token scade dopo 7 giorni o non appena l’utente si disconnette.
È possibile vedere la maggior parte dell’implementazione qui: FEATURE: allow long polling to go to a different url · discourse/discourse@aa9b3bb · GitHub

