Plusieurs règles Apache ProxyPass complexes nécessaires sous le chemin + problème de téléchargement de l'image d'avatar utilisateur

Bonjour.

Nous avons une installation Discourse v2.4.0.beta2 +346 qui était à l’origine accessible à l’adresse include.metaring.com,

en utilisant Apache HTTP Server sur Ubuntu, qui :

  • Redirige toutes les requêtes HTTP vers HTTPS
  • Gère lui-même le certificat SSL (LetsEncrypt)
  • Redirigeait toutes les requêtes via un Proxy utilisant nginx http sock, de sorte que les ports Docker 80 et 443 de Discourse sont désactivés/non utilisés

Nous avons exécuté :
./launcher enter app
rails c
[1] pry(main)> SiteSetting.force_https = true
=> true

Pour être absolument certain que tout était servi en HTTPS (nous avions plusieurs erreurs sinon)

Et tout fonctionnait parfaitement.

Ensuite, nous avons décidé de déplacer l’application (sans toucher à la base de données ni aux autres éléments) sous include.metaring.com/discourse, nous avons donc édité le fichier app.yml comme suit :

  • DISCOURSE_HOSTNAME: include.metaring.com <—inchangé, identique à avant
  • DISCOURSE_RELATIVE_URL_ROOT: /discourse

Puis, pour être extrêmement sûr, nous avons exécuté :
./launcher stop app
./launcher destroy app
./launcher cleanup
./launcher rebuild app

Bien sûr, nous avons également ajouté dans le fichier de configuration Apache les règles pour ProxyPass correctement de /discourse vers unix:/../../nginx.http.sock|http://localhost/*discourse*

Après cela, l’application était bien sûr en ligne, mais présentait de nombreux problèmes :

  1. Tout le contenu statique (plugins, assets, images, javascripts, uploads) n’était pas accessible. Après de longues sessions de débogage et des recherches web infructueuses pour les faire fonctionner, nous avons créé quelques règles de proxy dans Apache pour les tunnelliser vers le chemin racine localhost, sans le préfixe /discourse (par exemple, /discourse/plugins pointe vers → unix:/../../nginx.http.sock|http://localhost/plugins, etc.)

  2. Certains chemins /uploads provenaient des pages web sans le préfixe /discourse, nous avons donc dû écrire une autre règle de proxy Apache pour déplacer /uploads/ vers unix:/../../nginx.http.sock|http://localhost/discourse/uploads

  3. Maintenant, la chose la plus étrange : lorsque le client envoie des requêtes contenant /uploads/default/ ou /discourse/uploads/default/ (contenu statique), nous devons suivre la solution au point 1 décrite ci-dessus et les rediriger toutes deux vers http://localhost/uploads/default/ (sans le préfixe /discourse), tandis que les autres requêtes /uploads/ ou /discourse/uploads/ qui ne contiennent pas le préfixe /default dans le chemin doivent être redirigées vers http://localhost/discourse/uploads/ (remarquez que sans le chemin default, cela signifie qu’il s’agit d’appels de services web)

Avec toutes ces 9 règles de proxy que nous avons ajoutées, tout fonctionne à nouveau parfaitement, même sous le chemin /discourse. Mais il nous semble extrêmement étrange d’avoir dû écrire tout cela pour faire fonctionner à nouveau l’ensemble.
Faisons-nous quelque chose de mal ?
Existe-t-il une autre méthode intelligente pour gérer cette situation ?

=== ÉDIT ===
Oublié un autre élément qui est peut-être lié :
Lorsque l’utilisateur tente de télécharger une image personnalisée à utiliser comme avatar personnel, le téléchargement réussit et la miniature de l’image s’affiche correctement.

Mais lorsque le bouton Enregistrer les modifications est appuyé et que la page est rechargée, l’avatar revient à l’avatar utilisateur par défaut


En vérifiant le fichier production.log, il indique que l’erreur est Code 418.
Les autres téléchargements d’images fonctionnent bien.

Merci d’avance pour vos réponses et pour votre travail incroyable !

Les installations dans un sous-dossier sont beaucoup plus complexes et ne sont pas recommandées.

Compris. Merci.

Mais nous n’avons aucune chance dans ce cas, donc si aucune autre suggestion n’est faite, nous continuerons de surveiller la situation pour voir s’il existe d’autres règles de proxy à gérer.

N’avez-vous aucune suggestion concernant le contenu téléchargé par les utilisateurs ? Cela ressemble à un problème de stockage en base de données, n’est-ce pas ?