Diverse regole complesse Apache ProxyPass necessarie sotto il percorso + problema di caricamento immagine avatar utente

Ciao.

Abbiamo un’installazione Discourse v2.4.0.beta2 +346 che era originariamente disponibile su include.metaring.com,

utilizzando Apache HTTP Server su Ubuntu che:

  • Reindirizza tutte le richieste HTTP verso HTTPS
  • Gestisce autonomamente il certificato SSL (LetsEncrypt)
  • Tutte le richieste venivano reindirizzate tramite Proxy verso nginx http sock, quindi le porte Docker di Discourse 80 e 443 sono disabilitate/non utilizzate

Abbiamo eseguito
./launcher enter app
rails c
[1] pry(main)> SiteSetting.force_https = true
=> true

Per essere assolutamente certi che tutto venisse servito in HTTPS (avevamo diversi errori altrimenti)

E tutto funzionava correttamente.

Poi abbiamo deciso di spostare l’applicazione (senza toccare il DB o altro) sotto include.metaring.com/discourse, quindi abbiamo modificato il file app.yml come segue:

  • DISCOURSE_HOSTNAME: include.metaring.com <— Invariato, uguale a prima
  • DISCOURSE_RELATIVE_URL_ROOT: /discourse

Poi, per essere assolutamente certi, abbiamo eseguito:
./launcher stop app
./launcher destroy app
./launcher cleanup
./launcher rebuild app

Naturalmente abbiamo anche inserito nel file di configurazione di Apache le regole per ProxyPass correttamente da /discourse a unix:/../../nginx.http.sock|http://localhost/*discourse*

Dopo questo, l’applicazione era ovviamente online, ma presentava molti problemi:

  1. Tutto il contenuto statico (plugin, asset, immagini, javascript, upload) non era disponibile. Dopo lunghe sessioni di debug e ricerche web infruttuose per farli funzionare, abbiamo creato alcune regole di proxy in Apache per instradarli verso il percorso root localhost, senza il prefisso /discourse (ad esempio /discourse/plugins punta a → unix:/../../nginx.http.sock|http://localhost/plugins e così via)

  2. Alcuni percorsi /uploads provenivano dalle pagine web senza il prefisso /discourse, quindi abbiamo dovuto scrivere un’altra regola di proxy Apache che spostasse da /uploads/ a unix:/../../nginx.http.sock|http://localhost/discourse/uploads

  3. Ora la cosa più strana: quando il client invia richieste contenenti /uploads/default/ o /discourse/uploads/default/ (contenuto statico) dobbiamo seguire la soluzione descritta al punto 1 e reindirizzarle entrambe a http://localhost/uploads/default/ (senza il prefisso /discourse), mentre altre richieste /uploads/ o /discourse/uploads/ che non contengono il prefisso /default nel percorso devono essere reindirizzate a http://localhost/discourse/uploads/ (notate che senza il percorso default significa che si tratta di chiamate a servizi web)

Con tutte queste 9 regole di proxy inserite, tutto funziona di nuovo correttamente anche sotto il percorso /discourse. Ma troviamo estremamente strano che abbiamo dovuto scrivere tutto questo per far funzionare di nuovo tutto.
Stiamo facendo qualcosa di sbagliato?
Esiste qualche altro metodo intelligente per gestire questa situazione?

=== EDIT ===
Ho dimenticato un’altra cosa che forse è collegata:
Quando l’utente tenta di caricare un’immagine personalizzata da usare come avatar personale, il caricamento ha successo e la miniatura dell’immagine viene mostrata correttamente.

Ma quando viene premuto il pulsante Salva modifiche e la pagina viene ricaricata, l’avatar torna all’avatar predefinito dell’utente


Controllando il file produciton.log, si vede che l’errore è Codice 418.
Altri caricamenti di immagini funzionano correttamente.

Grazie in anticipo per le risposte e per il vostro straordinario lavoro!

Le installazioni in sottocartelle sono molto più complesse e non sono consigliate.

Capito. Grazie.

Ma in questo caso non abbiamo alternative, quindi, se non ci sono altri suggerimenti, continueremo a monitorare la situazione per vedere se esistono altre regole proxy da gestire.

Non hai qualche suggerimento riguardo al caricamento dei file da parte degli utenti? Sembra un problema di archiviazione del database, vero?