Inoltro al container Discourse con nginx proxy_pass e link da Discourse al server host

Ciao al team di Discourse,

Sto eseguendo un server nginx sulla mia macchina host e un container Discourse abbastanza standard in Docker. Fondamentalmente, ho un piccolo numero di cartelle specifiche (HTTP) servite dall’nginx dell’host, mentre tutto il resto viene inoltrato al container Discourse tramite proxy_pass.

Per quanto capisco il problema, è sufficiente sapere che il file di configurazione nginx dell’host definisce una location /xyz, gestita dall’nginx dell’host, e poi una location / definita per essere inoltrata (proxy_pass) al container Discourse.

Per il mio caso d’uso, devo pubblicare collegamenti come post su Discourse che puntano a my.domaiin.com/xyz/some.html, ovvero collegamenti all’interno di Discourse che indicano pagine servite dall’nginx dell’host.

Questo funzionava fino all’ultimo aggiornamento di Discourse. Ora, cliccando sui collegamenti, si finisce nella pagina “non è stato possibile trovare…” di Discourse. Al contrario, copiando i target dei collegamenti e aprendoli in una nuova scheda funziona come previsto.

Ho una buona conoscenza dei protocolli a basso livello, ma più si sale nello stack dei protocolli, meno ne so :wink:
L’ipotesi corrente è che l’nginx di Discourse mantenga la connessione aperta (keepalive?), così l’nginx dell’host perde l’opportunità di analizzare il nuovo percorso della richiesta per selezionare il server corretto. Le richieste della connessione vengono passate al container così come sono, mantenendo la connessione attiva. Di conseguenza, la richiesta per il percorso /xyz viene gestita da Discourse, che non conosce questa cartella.

Come dovrei affrontare questo problema? Se non esiste una soluzione semplice, sarebbe già utile ricevere alcuni suggerimenti, anche una buona descrizione relativa a una conoscenza decente del protocollo HTTP potrebbe aiutare.

Grazie!

Nota aggiuntiva: Se si tratta davvero di un problema di keep-alive, sono perfettamente disposto a disabilitare il keep-alive e ad accettare un certo sovraccarico di costi. Questa installazione non è pensata per servire un gran numero di utenti.

Riflettendoci, probabilmente devo configurare anche l’nginx host in modo che ascolti una named pipe, esporre questa pipe nel container di Discourse e aggiungere la mia cartella personalizzata /xyz alla configurazione nginx di Discourse, per fare proxy_pass attraverso la pipe appena creata. (Dopo aver risolto i dettagli, ad esempio l’nginx host deve avviarsi per primo, altrimenti docker-compose non esporrà correttamente la named pipe)

Comunque, qualsiasi aiuto è apprezzato :wink:

Ciò è dovuto al fatto che il router di Ember.JS conosce l’elenco completo dei percorsi supportati dall’applicazione Discourse e la pagina 404 viene resa lato client perché sa che il server non ha contenuti in quella posizione.

Posiziona i tuoi file su un altro sottodominio.