ich betreibe eine eigene Discourse-Instanz, die ich nach der grundlegenden Docker-Installationsanleitung installiert habe. Das Problem, das ich habe, ist, dass nach einigen Tagen der Forennutzung die Anmeldung vollständig aufhört zu funktionieren. Beachten Sie, dass ich der einzige Benutzer auf diesem Forum bin. Leider weiß ich jedoch nicht, was den Fehler verursacht.
Schritte zur Reproduktion #1:
Installieren Sie einen neuen Discourse-Server, indem Sie die Anweisungen aus der Docker-Installationsanleitung befolgen.
Sobald der Einrichtungsassistent abgeschlossen ist, überprüfen Sie, ob Sie sich erfolgreich ab- und wieder anmelden können.
Nutzen Sie das Forum weiterhin normal. Erstellen Sie einfach einige Kategorien und Beiträge. Ändern Sie vielleicht das Standardthema.
Nach einigen Tagen oder Wochen normaler Nutzung können Sie sich nach der Abmeldung nicht mehr anmelden. Die Anmeldung schlägt mit „Unbekannter Fehler“ fehl (wird im Anmeldeformular angezeigt).
Schritte zur Reproduktion #2:
Installieren Sie einen neuen Discourse-Server, indem Sie die Anweisungen aus der Docker-Installationsanleitung befolgen.
Sobald der Einrichtungsassistent abgeschlossen ist, überprüfen Sie, ob Sie sich erfolgreich ab- und wieder anmelden können.
Stellen Sie eine Sicherungskopie von einer anderen Discourse-Instanz wieder her, bei der die Anmeldung fehlschlug.
Während die Wiederherstellung läuft, erhalten Sie eine Popup-Nachricht, dass Sie abgemeldet wurden. Die Wiederherstellung war erfolgreich, aber die Anmeldung schlägt mit „Unbekannter Fehler“ fehl (wird im Anmeldeformular angezeigt).
Ich habe versucht, das Problem selbst zu debuggen, konnte aber keine relevanten Fehlermeldungen finden. Das habe ich bisher versucht:
cd /var/discourse
./launcher enter app
tail -F log/production_errors.log
tail -F log/production.log
tail -F log/unicorn.stderr.log
tail -F log/unicorn.stdout.log
Während eines fehlgeschlagenen Anmeldevorgangs erscheint in diesen Protokollen keine Fehlermeldung. Was kann ich noch tun, um bei der Fehlersuche zu helfen? Vielen Dank im Voraus.
Endlich habe ich die Lösung gefunden. Der Header X-Forwarded-Proto muss gesetzt werden. Er dient dazu, das Protokoll (HTTP oder HTTPS) zu identifizieren, das ein Client zur Verbindung mit Ihrem Proxy oder Load Balancer verwendet hat.
Da ich HAProxy als Proxy-Server verwende, musste ich diese Zeile zu meiner HAProxy-Konfiguration hinzufügen:
http-request set-header X-Forwarded-Proto https if { ssl_fc }
Jetzt funktioniert die Anmeldung auch dann einwandfrei, wenn „HTTPS erzwingen
Ich möchte auch das PROXY-Protokoll über jede Verbindung verwenden, die zu meinem Discourse-Server hergestellt wird. Das PROXY-Protokoll informiert das andere Ende (d. h. den Discourse-Server) über die Adressen der eingehenden Verbindung, sodass er die Adresse des Clients oder die öffentliche Adresse, auf die zugegriffen wurde, erkennen kann. Ohne diese Änderung weiß Nginx nicht, welche Adresse der Client hat, und alle Logs enthalten stattdessen die Adresse Ihres Reverse-Proxy-Servers. Die folgenden Änderungen bewirken das Gewünschte: