Sto eseguendo la mia istanza di Discourse, installata seguendo la guida base all’installazione Docker. Il problema che riscontro è che, dopo pochi giorni di utilizzo del forum, l’accesso smette completamente di funzionare. Tieni presente che sono l’unico utente su questo forum. Purtroppo, non so cosa stia causando il bug.
Passaggi per riprodurre il problema #1:
Installa un nuovo server Discourse seguendo le istruzioni della guida all’installazione Docker.
Una volta completata la procedura guidata di configurazione, verifica di poter disconnettere e riconnettere l’account con successo.
Continua a utilizzare il forum normalmente: crea alcune categorie e post, magari modifica il tema predefinito.
Dopo alcuni giorni o settimane di utilizzo regolare, non sarai più in grado di accedere dopo esserti disconnesso. L’accesso fallisce con il messaggio “Errore sconosciuto” (visualizzato nel modulo di accesso).
Passaggi per riprodurre il problema #2:
Installa un nuovo server Discourse seguendo le istruzioni della guida all’installazione Docker.
Una volta completata la procedura guidata di configurazione, verifica di poter disconnettere e riconnettere l’account con successo.
Ripristina un backup da un’altra istanza di Discourse in cui l’accesso non funzionava.
Durante il ripristino, viene visualizzato un messaggio popup che indica che sei stato disconnesso. Il ripristino ha avuto successo, ma l’accesso fallisce con il messaggio “Errore sconosciuto” (visualizzato nel modulo di accesso).
Ho provato a risolvere il problema da solo, ma non sono riuscito a trovare alcun messaggio di errore rilevante. Ecco cosa ho tentato finora:
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
Nessun messaggio di errore appare in questi log durante un tentativo di accesso fallito. Cosa altro posso fare per aiutare a diagnosticare questo problema? Grazie in anticipo.
OK, ho capito qualcosa. Il login fallisce non appena attivo l’impostazione “force https”. La mia istanza di Discourse si trova dietro un server proxy con terminazione SSL. Non appena disattivo “force https”, il login funziona di nuovo. Quindi probabilmente non si tratta di un bug di Discourse, ma piuttosto di un problema nella configurazione della mia infrastruttura.
Ho anche fatto come hai suggerito, ma non c’era alcun messaggio di errore nei log.
Ho finalmente trovato la soluzione. L’header X-Forwarded-Proto deve essere impostato; viene utilizzato per identificare il protocollo (HTTP o HTTPS) che un client ha utilizzato per connettersi al proprio proxy o load balancer.
Poiché utilizzo HAProxy come server proxy, ho dovuto aggiungere questa riga alla mia configurazione di HAProxy:
http-request set-header X-Forwarded-Proto https if { ssl_fc }
Ora l’accesso funziona correttamente anche quando “force https” è abilitato.
Voglio anche utilizzare il protocollo PROXY su qualsiasi connessione stabilita con il mio server Discourse. Il protocollo PROXY informa l’altra parte (cioè il server Discourse) riguardo agli indirizzi della connessione in ingresso, in modo che possa conoscere l’indirizzo del client o l’indirizzo pubblico a cui è stato acceduto. Senza questa modifica, Nginx non conoscerà l’indirizzo del client e tutti i log conterranno l’indirizzo del tuo server reverse-proxy. Le seguenti modifiche risolvono il problema: