Reenvío al contenedor de Discourse con proxy_pass de nginx y enlaces de Discourse al servidor host

Hola, equipo de Discourse,

Estoy ejecutando un servidor nginx en mi máquina anfitriona y un contenedor de Discourse bastante estándar en Docker. Básicamente, tengo un pequeño número de carpetas específicas (HTTP) servidas por el nginx del anfitrión, y todo lo demás se reenvía al contenedor de Discourse mediante proxy_pass.

Según mi comprensión del problema, basta con entender que mi archivo de configuración de nginx del anfitrión define una ubicación /xyz, que es manejada por el nginx del anfitrión, y luego se define una ubicación / para ser reenviada mediante proxy_pass al contenedor de Discourse.

Para mi caso de uso, necesito publicar enlaces como publicaciones de Discourse que apunten a mi.dominio.com/xyz/algo.html, es decir, enlaces dentro de Discourse que apuntan a páginas servidas por el nginx del anfitrión.

Esto funcionaba hasta la última actualización de Discourse. Ahora, al hacer clic en los enlaces, terminan en la página de Discourse “no se pudo encontrar…”. En cambio, copiar los destinos de los enlaces y abrirlos en una nueva pestaña funciona como se espera.

Tengo bastante conocimiento sobre protocolos de bajo nivel, pero cuanto más alto subo en la pila de protocolos, menos sé :wink:
Mi hipótesis actual es que el nginx de Discourse mantiene la conexión abierta (keepalive?), por lo que el nginx del anfitrión pierde la oportunidad de analizar la nueva ruta de solicitud para seleccionar el servidor correcto. Las solicitudes de la conexión se pasan al contenedor tal cual, manteniéndose activas. Entonces, la solicitud para la ruta /xyz es respondida por Discourse, que no conoce esta carpeta..

¿Cómo debería abordar este problema? Si no hay una solución sencilla, ya sería de ayuda obtener algunas indicaciones; incluso una buena descripción con respecto a un conocimiento decente del protocolo HTTP podría servir.

¡Gracias!

Nota adicional: Si esto es realmente un problema de keep-alive, no tengo ningún problema en desactivar keep-alive y aceptar cierta sobrecarga de costos. Esta instalación no está diseñada para servir a un gran número de usuarios.

Pensándolo bien, probablemente necesite configurar el nginx del host para que también escuche en una tubería con nombre, exponer esta tubería en el contenedor de Discourse y agregar mi carpeta personalizada /xyz a la configuración de nginx de Discourse, para redirigirla (proxy_pass) de vuelta a través de la tubería recién creada. (Después de resolver los detalles, por ejemplo, el nginx del host debe iniciarse primero; de lo contrario, docker-compose no expondrá correctamente la tubería con nombre)

Aún así, cualquier ayuda será apreciada :wink:

Esto se debe a que el enrutador de Ember.JS conoce la lista completa de rutas compatibles con la aplicación Discourse, y la página 404 se renderiza del lado del cliente porque sabe que el servidor no tiene contenido allí.

Coloca tus archivos en otro subdominio.