Bonjour,
Je rencontre un problème étrange avec mon Discourse où les erreurs 502 ne se produisent que pour un compte utilisateur spécifique (administrateur) après la connexion, alors que :
-
Les utilisateurs anonymes peuvent accéder au site normalement
-
D’autres comptes utilisateurs peuvent se connecter et utiliser le site normalement
-
Le problème n’apparaît que pour un compte spécifique (compte administrateur)
Environnement
-
Discourse installé via la configuration Docker officielle
-
Proxy inverse / CDN : ArvanCloud (similaire à Cloudflare)
-
L’accès à Internet international est restreint / instable (GitHub et certains services externes non accessibles)
-
Discourse n’a pas été mis à jour depuis environ 1 mois
Symptômes
Lors de l’accès au site :
-
Si j’ouvre le site en mode privé/incognito → le site se charge correctement
-
Si je me connecte avec mon compte principal → j’obtiens immédiatement une erreur 502 Bad Gateway
-
Si je me connecte avec un autre compte → tout fonctionne bien
Le problème est donc clairement spécifique à l’utilisateur et déclenché après l’authentification.
Journaux d’erreurs du CDN (ArvanCloud)
Deux erreurs principales apparaissent :
1. Délai d’attente de la connexion en amont lors de la lecture de l’amont (Upstream timeout while reading upstream)
upstream timed out (110: Connection timed out) while reading upstream
Les URL affectées sont principalement des assets, par exemple :
-
/assets/browser-detect-*.js
-
/assets/plugins/automation-*.js
-
/assets/plugins/discourse-gamification-*.js
-
/assets/plugins/discourse-lazy-videos-*.js
2. Connexion fermée prématurément par l’amont (Upstream prematurely closed connection)
upstream prematurely closed connection while reading response header from upstream
Par exemple :
-
/stylesheets/common_theme_rtl_*.css
-
/theme-javascripts/*.js
Le CDN attend donc une réponse de Discourse, mais le backend expire ou ferme la connexion.
Ce que j’ai trouvé sur le backend
Dans les traces de pile Rails, le chemin de l’erreur pointe vers :
-
current_user_serializer.rb -
discourse_updates.rb -
méthode :
DiscourseUpdates.has_unseen_features?
Ce qui suggère que le crash/timeout se produit lors de la vérification des annonces de nouvelles fonctionnalités pour les utilisateurs connectés.
Puisque seul un utilisateur est affecté, cela suggère fortement que le problème est déclenché pendant la sérialisation spécifique à l’utilisateur, et non lors du rendu global du site.
Toute aide serait appréciée.
Merci beaucoup.