Come installare Discourse dietro Apache mod_proxy?

Ciao a tutti.

Sto cercando di configurare Discourse in un contenitore Docker. L’ambiente host (Debian) esegue un server Apache httpd (non posso eseguire nginx perché sto ospitando altri siti su Apache). Voglio utilizzare mod_proxy per fare reverse proxy al contenitore, che ascolta sulla porta 3000.

La configurazione attuale di Apache per questo vhost è la seguente:

<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>

Ho iniziato con le sole direttive ProxyPass e ProxyPassReverse, aggiungendo ProxyPreserveHost e le direttive RequestHeader una alla volta. Non importa come configuro il proxy utilizzando queste direttive, alcuni file sotto la root del documento restituiscono 404 quando vengono accessi (ad esempio, contenuti in /images e /assets).

Notare il commento contenente l’URL di Discourse Meta che ho convertito dalla sintassi nginx a quella Apache.

Qualsiasi suggerimento su come far funzionare questa configurazione sarebbe molto apprezzato!

Dai un’occhiata a Set up Discourse on a server with existing Apache sites

Quindi la soluzione che proponi è eseguire Discourse dietro HAProxy dietro Apache?

Come ho detto, devo usare Apache all’inizio perché sto ospitando altri vhost su questa macchina.

Perché non nginx? Non sono sicuro delle prestazioni di Discourse con Apache.

Al momento non ho il tempo o le risorse per passare a nginx.

Per essere chiari, Discourse stesso sarebbe in esecuzione su nginx, ma deve essere inoltrato tramite Apache.

Ho fatto un’ulteriore ricerca e credo di poter raggiungere l’obiettivo desiderato, poiché sembra che HAProxy possa scegliere i backend in base al vhost.

Scusa. Ho fatto la ricerca sbagliata. Forse puoi riprovare e trovare una howto per Apache.

HAProxy fa esattamente ciò che mi serve e sembra uno strumento molto curato e utile. Grazie per il suggerimento.

Tuttavia, sembra che il problema fosse legato alla modifica dei file templates/web*.yml per ascoltare porte diverse dalle predefinite 80 e 443. Ho ripristinato le configurazioni predefinite, quindi ho modificato containser/app.yml aggiungendo righe simili alle seguenti, e gli errori 404 sono scomparsi:

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

Ultimamente sono davvero soddisfatto di Traefik, che genera automaticamente i certificati Let’s Encrypt (si può fare anche con HA-Proxy, ma richiede un po’ più di lavoro).

Sono contento che tu abbia risolto!