Ejecutar 2 hosts detrás de haproxy falla con errores 404 aleatorios

Hoy intenté agregar un segundo servidor para alojar una de nuestras instancias de Discourse. El contenedor está configurado para usar servidores externos de Redis, PostgreSQL y almacenamiento; solo es la aplicación web. Hasta ahora, hemos estado ejecutando los sitios de un solo servidor detrás de HAProxy sin problemas. Al ejecutar con dos servidores detrás de HAProxy, vemos bastantes errores 404 de nginx para archivos JS. Eliminar cualquiera de los servidores de HAProxy resuelve el problema. Las URLs de los archivos que generan 404 parecen ser idénticas, por lo que no entiendo por qué no serían servidos por ninguno de los servidores.

No hay sobrescrituras en la configuración de Desarrollador. Estamos ejecutando la versión 2.4.3 estable.

1 me gusta

Si estás ejecutando más de un contenedor web, necesitas algo que garantice que ambos tengan acceso a los archivos estáticos.

La solución más sencilla es Usar almacenamiento de objetos para las cargas (clones de S3)

4 Me gusta

@Falco Hola, gracias por la respuesta. Los dos servidores utilizan almacenamiento compartido a través de NFS. En mi configuración de contenedor tengo esto:

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

Sin embargo, cada contenedor almacena sus propias copias de los activos generados por el paso assets:precompile. ¿Es necesario compartir los activos precompilados?

1 me gusta

Además de agregar y eliminar backends en HAProxy, ¿qué has hecho para probarlo?

¿Tu configuración de HAProxy utiliza backends aleatorios o afinidad? ¿El error 404 es registrado por HAProxy? ¿Es registrado por nginx? ¿Es el primer o el segundo backend el que falla? ¿Tu sitio requiere inicio de sesión? ¿Puedes reproducir los errores al conectarte directamente a nginx desde detrás del servidor proxy? ¿Los archivos que se solicitan existen en el disco? ¿Son todos los archivos JS o solo algunos específicos?

3 Me gusta

Gracias al consejo de @Falco, intenté agregar lo siguiente a la configuración de mi contenedor y ahora todo funciona como se esperaba:

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

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