¿Cómo instalar Discourse detrás de Apache mod_proxy?

Hola a todos.

Estoy intentando configurar Discourse en un contenedor Docker. El entorno del host (Debian) tiene un servidor Apache httpd en ejecución (no puedo ejecutar nginx porque estoy alojando otros sitios en Apache). Quiero usar mod_proxy para hacer proxy inverso al contenedor, que está escuchando en el puerto 3000.

La configuración actual de Apache para este vhost es la siguiente:

<VirtualHost *:80>
  ServerAdmin webmaster@example.com
  ServerName example.com
  ServerAlias www.example.com

  ErrorLog ${APACHE_LOG_DIR}/vhosts/example.com/error.log
  CustomLog ${APACHE_LOG_DIR}/vhosts/example.com/access.log combined

  <IfModule proxy_module>
  ## <https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247>
    ProxyPreserveHost on
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
  </IfModule>
</VirtualHost>

Empecé solo con las directivas ProxyPass y ProxyPassReverse y agregué ProxyPreserveHost y las directivas RequestHeader una a la vez. No importa cómo configure el proxy usando estas directivas, ciertos archivos debajo del documento raíz devuelven 404 al acceder (por ejemplo, cosas en /images y /assets).

Tenga en cuenta el comentario que contiene la URL de Discourse Meta que convertí de la sintaxis de nginx a Apache.

Cualquier idea sobre cómo hacer que esto funcione sería muy apreciada.

Echa un vistazo a Set up Discourse on a server with existing Apache sites

Entonces, la solución que propones es ejecutar Discourse detrás de HAProxy y este a su vez detrás de Apache.

Como ya dije, tengo que usar Apache al frente porque estoy alojando otros vhosts en esta máquina.

¿Por qué no nginx? No estoy seguro del rendimiento de Discourse con Apache.

En este momento, no tengo el tiempo ni los recursos para cambiar a nginx.

Para aclarar, Discourse se ejecutaría en nginx, pero debe estar proxyado a través de Apache.

He investigado un poco más sobre esto y creo que puedo lograr lo que busco, ya que parece que HAProxy puede seleccionar backends en función del vhost.

Lo siento. He realizado la búsqueda incorrecta. Quizás puedas intentarlo de nuevo y encontrar un howto para Apache.

HAProxy hace lo que necesito y parece una herramienta muy pulida y útil. Gracias por la indicación.

Sin embargo, parece que el problema estaba al editar las plantillas web*.yml para escuchar en puertos distintos a los predeterminados 80 y 443. Restauré las configuraciones predeterminadas y luego edité containser/app.yml para incluir líneas similares a las siguientes, y los errores 404 desaparecieron:

expose:
  - "127.0.0.1:1234:80"    # http

He estado muy satisfecho con Traefik últimamente, y emite certificados de Let’s Encrypt automáticamente (también puedes hacerlo con HA-Proxy, aunque requiere un poco más de trabajo).

¡Me alegra que lo hayas resuelto!