Installation von Discourse hinter Apache mod_proxy

Hallo zusammen.

Ich versuche, Discourse in einem Docker-Container einzurichten. Die Host-Umgebung (Debian) läuft mit einem Apache httpd-Server (ich kann nginx nicht verwenden, da ich andere Websites auf Apache hoste). Ich möchte mod_proxy verwenden, um einen Reverse-Proxy zum Container einzurichten, der am Port 3000 lauscht.

Die aktuelle Apache-Konfiguration für diesen VirtualHost sieht wie folgt aus:

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

Ich habe mit nur den ProxyPass- und ProxyPassReverse-Direktiven begonnen und schrittweise ProxyPreserveHost sowie die RequestHeader-Direktiven hinzugefügt. Egal, wie ich den Proxy mit diesen Direktiven konfiguriere, bestimmte Dateien unterhalb des Dokumentenstamms liefern beim Aufruf einen 404-Fehler (zum Beispiel Inhalte in /images und /assets).

Beachten Sie den Kommentar mit der Discourse-Meta-URL, den ich von der nginx-Syntax in Apache-Syntax umgewandelt habe.

Irgendwelche Ideen, wie man das zum Laufen bringt, wären sehr willkommen!

Schauen Sie sich Set up Discourse on a server with existing Apache sites an

Die von dir vorgeschlagene Lösung besteht also darin, Discourse hinter HAProxy und dieses wieder hinter Apache laufen zu lassen?

Wie bereits erwähnt, muss ich Apache an der Front verwenden, da ich auf diesem Server weitere virtuelle Hosts betreibe.

Warum nicht nginx? Ich bin mir nicht sicher, wie die Leistung von Discourse mit Apache ist.

Ich habe im Moment weder die Zeit noch die Ressourcen, um auf nginx umzusteigen.

Um Missverständnisse zu vermeiden: Discourse selbst würde auf nginx laufen, muss aber durch Apache geproxyt werden.

Ich habe mich etwas genauer damit beschäftigt und glaube, dass ich das erreichen kann, was ich vor habe, da HAProxy Backends basierend auf dem vhost auswählen kann.

Entschuldigung. Ich habe die falsche Suche durchgeführt. Vielleicht kannst du es noch einmal versuchen und eine howto für Apache finden.

HAProxy erledigt genau das, was ich brauche, und sieht nach einem sehr ausgereiften und nützlichen Werkzeug aus. Danke für den Hinweis.

Allerdings scheint das Problem darin bestanden zu haben, dass die Templates/web*.yml bearbeitet wurden, um auf anderen Ports als den Standardports 80 und 443 zu lauschen. Ich habe die Standardkonfigurationen wiederhergestellt und dann containser/app.yml so bearbeitet, dass es Zeilen wie die folgenden enthält, und die 404-Fehler sind verschwunden:

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

Ich bin mit Traefik in letzter Zeit sehr zufrieden, und es vergibt Let’s Encrypt-Zertifikate automatisch (das geht auch mit HA-Proxy, ist aber etwas aufwendiger.)

Schön, dass du es hinbekommen hast!