Weiterleitung an Discourse-Container mit nginx proxy_pass und Links von Discourse zum Host-Server

Hallo Discourse-Team,

ich betreibe einen nginx-Server auf meinem Host-Rechner und einen recht standardmäßigen Discourse-Container in Docker. Im Grunde werden einige wenige spezifische (HTTP-)Ordner vom Host-nginx bereitgestellt, während alles andere über proxy_pass an den Discourse-Container weitergeleitet wird.

Soweit ich das Problem verstehe, reicht es aus zu wissen, dass meine Host-nginx-Konfigurationsdatei einen Location /xyz definiert, der vom Host-nginx behandelt wird, und dass ein Location / definiert ist, der per proxy_pass an den Discourse-Container weitergeleitet wird.

Für meinen Anwendungsfall muss ich Links als Discourse-Beiträge posten, die auf my.domaiin.com/xyz/some.html verweisen, also Links innerhalb von Discourse, die auf Seiten verweisen, die vom Host-nginx bereitgestellt werden.

Das hat bis zum letzten Discourse-Update funktioniert. Jetzt führen Klicks auf die Links zur Discourse-Seite „Konnte nicht gefunden werden…“. Im Gegensatz dazu funktioniert das Kopieren der Linkziele und Öffnen in einem neuen Tab wie erwartet.

Ich habe ein gewisses Verständnis für Low-Level-Protokolle, aber je höher ich im Protokollstack komme, desto weniger weiß ich :wink:
Meine derzeitige Hypothese lautet, dass Discourse-nginx die Verbindung offen hält (Keepalive?), sodass der Host-nginx die Möglichkeit verpasst, den neuen Anforderungspfad zu analysieren und den richtigen Server auszuwählen. Die Anfragen der Verbindung werden so an den Container weitergeleitet, wie sie gehalten werden. Dann wird die Anfrage für den Pfad /xyz von Discourse beantwortet, das diesen Ordner nicht kennt.

Wie sollte ich dieses Problem angehen? Wenn es keine einfache Lösung gibt, wäre es bereits hilfreich, einige Hinweise zu erhalten, sogar eine gute Beschreibung im Hinblick auf fundiertes HTTP-Protokollwissen könnte helfen.

Vielen Dank!

Zusätzlicher Hinweis: Falls es sich wirklich um ein Keep-Alive-Problem handelt, bin ich völlig damit einverstanden, Keep-Alive zu deaktivieren und einen gewissen Kostenaufwand in Kauf zu nehmen. Diese Installation ist nicht dafür gedacht, eine große Anzahl von Benutzern zu bedienen.

Wenn ich darüber nachdenke, muss ich wahrscheinlich auch den Host-Nginx auf einen benannten Pipe lauschen lassen, diesen Pipe in den Discourse-Container einbinden und meinen benutzerdefinierten Ordner /xyz in die Nginx-Konfiguration von Discourse aufnehmen, um ihn über den neu erstellten Pipe zurück zu proxy_pass. (Nachdem die Details geklärt sind, z. B. muss der Host-Nginx zuerst starten, sonst wird der benannte Pipe von docker-compose nicht ordnungsgemäß exponiert.)

Trotzdem wäre jede Hilfe willkommen :wink:

Dies liegt daran, dass der Ember.JS-Router die vollständige Liste der vom Discourse-Anwendung unterstützten Pfade kennt und die 404-Seite clientseitig gerendert wird, da der Router weiß, dass der Server dort keinen Inhalt hat.

Platzieren Sie Ihre Dateien auf einer anderen Subdomain.