Exécution de 2 hôtes derrière haproxy échoue avec des erreurs 404 aléatoires

Aujourd’hui, j’ai essayé d’ajouter un deuxième serveur pour héberger l’une de nos instances Discourse. Le conteneur est configuré pour utiliser des serveurs Redis, PostgreSQL et de stockage externes ; il ne s’agit que de l’application web. Jusqu’à présent, nous faisions fonctionner les sites sur un seul serveur derrière HAProxy sans aucun problème. Lorsque nous utilisons deux serveurs derrière HAProxy, nous constatons de nombreuses erreurs 404 de la part de Nginx pour les fichiers JS. Le retrait de l’un ou l’autre serveur de HAProxy résout le problème. Les URL des fichiers qui renvoient une erreur 404 semblent identiques, je suis donc perplexe quant à la raison pour laquelle aucun des deux serveurs ne les sert.

Aucune surcharge n’est configurée dans les paramètres de développement. Nous utilisons la version stable 2.4.3.

1 « J'aime »

Si vous exécutez plusieurs conteneurs web, vous avez besoin d’un moyen de garantir que tous deux aient accès aux fichiers statiques.

La solution la plus simple est Utiliser le stockage d’objets pour les téléversements (clones S3)

4 « J'aime »

@Falco Salut, merci pour ta réponse. Les deux serveurs utilisent un stockage partagé via NFS. Dans la configuration de mon conteneur, j’ai ceci :

volumes:
  - volume:
      host: {{ discourse_nas_path }}/data
      guest: /shared
  - volume:
      host: {{ discourse_nas_path }}/logs
      guest: /var/log

Cependant, chaque conteneur conserve ses propres copies des assets générés par l’étape assets:precompile. Est-il nécessaire de partager les assets précompilés ?

1 « J'aime »

À part ajouter et supprimer des backends dans HAProxy, qu’avez-vous fait pour tester cela ?

Votre configuration HAProxy utilise-t-elle des backends aléatoires ou l’affinité ? Le 404 est-il enregistré par HAProxy ? Est-il enregistré par nginx ? Est-ce le premier ou le second backend qui échoue ? Votre site nécessite-t-il une connexion ? Pouvez-vous reproduire les erreurs en vous connectant directement à nginx depuis derrière le serveur proxy ? Les fichiers demandés existent-ils sur le disque ? S’agit-il de tous les fichiers JS ou seulement de certains ?

3 « J'aime »

Grâce à l’indice de @Falco, j’ai essayé d’ajouter ce qui suit à la configuration de mon conteneur, et maintenant tout fonctionne comme prévu :

  - volume:
      host: {{ discourse_nas_path }}/assets
      guest: /var/www/discourse/public/assets
3 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.