Error de doble nginx en Discourse: No se pudo encontrar el módulo `handlebars` importado de `discourse-common/lib/raw-handlebars`

Hola.
Mi sitio web utiliza la versión 2.9 de Discourse. Por alguna razón, tuve que usar doble nginx para Discourse. Desplegué dos nodos de contenedor web_only y usé un nginx para hacer proxy delante de ellos. Diagrama de arquitectura de mi sistema:

Estaba confundido cuando mi proxy nginx personalizado, que reenvía a dos nodos de contenedor web_only y distribuye aleatoriamente las solicitudes a cualquier nodo web_only, a veces informaba errores en mi sitio web de Discourse: “Could not find module ‘handlebars’ imported from ‘discourse-common/lib/raw-handlebars’”. En ese momento, la visita del navegador mostraba una pantalla en blanco. Pero cuando usé un nginx personalizado para reenviar todas las solicitudes a solo uno de los nodos web_only, este error no ocurría. Busqué este problema, hubo algunas confirmaciones anteriores para resolver este mismo error, confirmé que mi versión contiene el código de esas confirmaciones.

Could not find module 'handlebars' imported from 'discourse-common/lib/raw-handlebars'

Broken instance after updating to 2.9.0.beta2 - #11 by david

¿Alguien sabe por qué es eso? Muchas gracias.

Por cierto, comparte un problema en el que el uso de doble nginx provoca que no se pueda obtener la dirección IP real del usuario.
Esto se debe a que mi nginx personalizado habilita el campo de encabezado X-Forwarded-For para obtener la dirección IP del cliente, pero no deshabilita el X-Forwarded-For del nginx de Discourse. Provoca que la configuración X-Forwarded-For del nginx personalizado sea sobrescrita por el nginx de Discourse.

¿Y no importa cuál uses? ¿Y están ejecutando la misma imagen? Eso es desconcertante.

La única ventaja que puedo ver al ejecutar dos contenedores de esa manera en el mismo host es que permite realizar actualizaciones sin tiempo de inactividad. Dado que no actualizas muy a menudo, parece que tienes una complejidad innecesaria.

Necesitas algo como esto en tu web_only.yml:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Muchas gracias por tu respuesta.

Sí, no importa cuál use. Están ejecutando la misma imagen web_only. Continuaré buscando problemas usando el modo seguro y si llego a alguna conclusión, informaré aquí.

Disculpa el malentendido en mi diagrama de arquitectura del sistema, usé una máquina diferente para desplegar web_only. La razón por la que uso doble web_only es que mi contenedor web_only una vez falló debido a demasiadas conexiones, pero en ese momento no descubrí la razón. Así que intenté usar doble web_only para evitar el mismo problema nuevamente.

Gracias, esto me ayudó a resolver el problema de obtener la IP del usuario real.

1 me gusta

Tiene sentido.

Hay una configuración para aumentar el número de conexiones.

Yo actualizaría. Debería haber algún problema en esa versión y estoy bastante seguro de que se han corregido varios problemas de seguridad desde entonces.

1 me gusta

Gracias. Por el momento, sigo recibiendo el mismo error cuando intento depurar en modo seguro. Estaré listo para intentar actualizar mi discourse para ver si funciona.

1 me gusta

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