Executar 2 hosts atrás do haproxy falha com 404s aleatórios

Hoje tentei adicionar um segundo servidor para hospedar uma das nossas instâncias do Discourse. O contêiner está configurado para usar servidores externos de Redis, PostgreSQL e armazenamento — apenas o aplicativo web. Até agora, temos executado os sites de servidor único atrás do HAProxy sem problemas. Ao executar com dois servidores atrás do HAProxy, observamos vários erros 404 do nginx para arquivos JS. Remover qualquer um dos servidores do HAProxy resolve o problema. As URLs dos arquivos que retornam 404 parecem ser idênticas, então estou sem entender por que eles não seriam atendidos por qualquer um dos servidores.

Não há sobrescritas nas configurações de Desenvolvedor. Estamos executando a versão estável 2.4.3.

Se você estiver executando mais de um container web, precisará de algo para garantir que ambos tenham acesso aos arquivos estáticos.

O caminho mais fácil é Usar Armazenamento de Objetos para Uploads (Clones S3)

@Falco Olá, obrigado pela resposta. Os dois servidores usam armazenamento compartilhado via NFS. Na minha configuração de contêiner, tenho o seguinte:

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

No entanto, cada contêiner armazena suas próprias cópias dos ativos gerados pela etapa assets:precompile. É necessário compartilhar os ativos pré-compilados?

Além de adicionar e remover backends no HAProxy, o que mais você fez para testar?

Sua configuração do HAProxy faz balanceamento aleatório de backends ou mantém afinidade? O erro 404 é registrado pelo HAProxy? É registrado pelo nginx? É o primeiro ou o segundo backend que apresenta o erro? Seu site exige login? Você consegue reproduzir os erros ao se conectar diretamente ao nginx a partir do servidor proxy? Os arquivos solicitados existem no disco? São todos os arquivos JS ou apenas alguns específicos?

Graças à dica de @Falco, tentei adicionar o seguinte à configuração do meu container e agora as coisas estão funcionando como esperado:

  - volume:
      host: {{ discourse_nas_path }}/assets
      guest: /var/www/discourse/public/assets