Discourse von einem Unterordner (Pfadpräfix) anstelle einer Subdomain bereitstellen

Bearbeiten von nginx/discourse.conf

Ich gehe davon aus, dass alle Änderungen an discourse.conf innerhalb des Containers ohnehin durch einen Rebuild rückgängig gemacht werden.

Um Änderungen beizubehalten, müssen Sie sie irgendwie in Ihre Container-Konfiguration aufnehmen – z. B. in web_only.yml:

# [… ]
## Denken Sie daran, dies ist YAML-Syntax – Sie können nur einen Block mit einem Namen haben
run:
  - exec: echo "Beginn benutzerdefinierter Befehle"
# [… ]
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: $proxy_add_x_forwarded_for
      to: $http_x_real_ip
      global: true
# [… ]

Debuggen einer Discourse-Installation in einem Unterordner

Bei einer Discourse-Installation in einem Unterordner läuft ein Aufruf an Discourse wie folgt ab:
example.org/forum[Externer Proxy für example.org]/pfad-zu-discourse/discourse/shared/web-only/nginx.http.sock[Nginx im Discourse-Webcontainer]

Wenn also ein Fehler auftritt, müssen wir ihn zuerst lokalisieren:

  • Externer Proxy
  • Nginx im Discourse-Container
  • Discourse selbst

Externer Proxy

  • Rufen Sie ihn in einem Browser auf und prüfen Sie das Ergebnis.
  • Überprüfen Sie die Fehlerprotokolle des externen Proxys.

Nginx im Discourse-Container

  1. Melden Sie sich per SSH bei Ihrem Webserver an.
  2. Stellen Sie über curl eine direkte Verbindung zum Socket her.
  3. Debuggen Sie die curl-Ausgabe und die Protokolle von Nginx in Discourse.

Wichtig: Verwenden Sie die http-URL – und nicht https.

curl -I --unix-socket /pfad-zu-discourse/discourse/shared/web-only/nginx.http.sock http://www.example.org/forum/

Wenn dies funktioniert, versuchen Sie einen echten Aufruf wie:

curl --unix-socket /pfad-zu-discourse/discourse/shared/web-only/nginx.http.sock \
-H "user-agent: Chrome/88.0.4324.182" \
-H "Accept-Encoding: gzip" \
http://www.example.org/forum/t/test-thread/12345 --output test-encoded.html.gz
3 „Gefällt mir“