Dichiarazione Ufficiale di Discourse sulla configurazione in sottocartella
Supportiamo le configurazioni in sottocartella per i nostri clienti ospitati a livello enterprise e superiore. A causa della notevole complessità tecnica di configurazione, consigliamo vivamente di non utilizzare questa impostazione a meno che tu non abbia molta esperienza con configurazioni personalizzate in sottocartella.
È fondamentale che tu abbia una profonda comprensione di
- configurazione NGINX nel container Docker di Discourse
- inoltro sicuro dell’IP originale utilizzando intestazioni personalizzate nella catena di proxy
- limitazione della frequenza di richieste nel server proxy frontale
Se tutto questo ti sembra strano e incomprensibile consigliamo vivamente di evitare questa configurazione.
Per servire Discourse da una sottocartella (nota anche come prefisso di percorso) sul tuo dominio, come https://www.example.com/=SUBFOLDER=, ecco come fare!
Configurazione Docker
Nella sezione env del file yml del tuo container Docker, aggiungi l’impostazione DISCOURSE_RELATIVE_URL_ROOT con la sottocartella che desideri utilizzare. Assicurati che non termini con /.
Modificando questo, l’intera guida verrà aggiornata.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
La sezione run necessita di alcune modifiche per inviare tutti i percorsi di Discourse nel posto giusto. Ecco una sezione run completa con supporto per la sottocartella:
run:
- exec:
cd: $home
cmd:
- mkdir -p public/=SUBFOLDER=
- cd public/=SUBFOLDER= && ln -s ../uploads && ln -s ../backups
- replace:
global: true
filename: /etc/nginx/conf.d/discourse.conf
from: proxy_pass http://discourse;
to: |
rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
proxy_pass http://discourse;
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: etag off;
to: |
etag off;
location /=SUBFOLDER= {
rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
}
- file:
path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-webroot.conf
chmod: 644
contents: |
set_real_ip_from 123.456.789.ABC; # l'indirizzo IP del tuo proxy upstream
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header x-forwarded-for;
Per ulteriori dettagli sulla preservazione dell’indirizzo IP dell’utente finale, consulta Handling the "chain of trust" of the end user's real IP.
Dopo aver apportato queste modifiche, esegui il bootstrap del tuo container Docker come al solito, oppure ricostruiscilo se stai modificando un container esistente.
./launcher bootstrap app
oppure
./launcher rebuild app
Allegato è un esempio completo di file yml per un container standalone:
subfolder-sample.yml (3.1 KB)
Preoccupazioni relative alla limitazione della frequenza
Se opti per questa configurazione, probabilmente vorrai limitare la frequenza delle richieste prima che raggiungano NGINX nel container, il che significa che probabilmente eviterai di utilizzare il nostro modello di limitazione della frequenza. È molto difficile configurare NGINX nel container per limitare in base a un IP rimappato e richiederebbe modifiche complesse al modello.
Post esistenti
Se hai fatto questo con un sito esistente che era su un sottodominio, scoprirai che i tuoi caricamenti sono rotti. Esiste uno strumento che può aiutare a correggere tutti i percorsi per includere la sottocartella. Innanzitutto, entra nel container Docker e naviga nella directory di Discourse:
cd /var/discourse
./launcher enter app
cd /var/www/discourse
Quindi esegui il comando di rimappatura dopo aver effettuato un backup:
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
Vedi anche: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain per configurazioni più esoteriche.
robots.txt
Ora che Discourse è in esecuzione in una sottocartella, non può servire il suo file robots.txt per controllare quali percorsi vengono scansionati dai web crawler. I crawler guarderanno il file robots.txt del tuo sito principale (https://www.example.com/robots.txt). Devi copiare il contenuto del file robots.txt di Discourse (trovato in https://www.example.com/=SUBFOLDER=/robots.txt) e inserirlo nel file robots.txt del tuo sito principale.