Dichiarazione ufficiale di Discourse sulla configurazione in sottocartella
Supportiamo le configurazioni in sottocartella per i nostri clienti enterprise e superiori. A causa della complessità tecnica elevata, ti consigliamo vivamente di non utilizzare questa configurazione a meno che tu non sia molto esperto in configurazioni personalizzate di sottocartelle.
È fondamentale avere una profonda comprensione di
- Configurazione NGINX nel container Docker di Discourse
- Instradamento IP originale sicuro utilizzando intestazioni personalizzate nella catena del proxy
- Limitazione della velocità (Rate limiting) nel server proxy anteriore
Se tutto questo ti suona strano, ti consigliamo vivamente di evitare questa configurazione.
Per servire Discourse da una sottocartella (alias con prefisso di percorso) sul tuo dominio, come https://www.example.com/=SUBFOLDER=, ecco come fare!
Configurazione Docker
Nella sezione env del tuo file yml del container docker, aggiungi l’impostazione DISCOURSE_RELATIVE_URL_ROOT con la sottocartella che desideri utilizzare. Assicurati che non finisca con uno /.
La modifica di questo aggiornerà l’intera guida.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
La sezione run necessita di alcune modifiche per inviare tutte le route di Discourse al posto giusto. Ecco una sezione run completa con supporto per sottocartelle:
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;
}
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: $proxy_add_x_forwarded_for
to: $http_your_original_ip_header
global: true
$http_your_original_ip_header sta per Your-Original-Ip-Header, che è un Header fidato che imposti sull’origine che contiene l’IP effettivo del client.
Questo è necessario perché il traffico passa attraverso un proxy centrale; se Discourse ha un IP pubblico, potresti essere in grado di falsificarlo. Se Discourse è privato, potresti cavartela con X-Forwarded-For.
Dopo aver apportato queste modifiche, avvia il tuo container Docker come al solito, o ricostruiscilo se stai modificando un container esistente.
./launcher bootstrap app
oppure
./launcher rebuild app
In allegato è disponibile un file yml di esempio completo per un container standalone.
subfolder-sample.yml (3.1 KB)
Preoccupazioni relative alla limitazione della velocità (Rate limiting)
Se stai optando per questa configurazione, probabilmente vorrai limitare la frequenza delle richieste prima che arrivino a NGINX nel container, il che significa che probabilmente eviterai di utilizzare il nostro template di limitazione della velocità. È molto difficile configurare NGINX nel container per limitare su un IP rimappato e richiederebbe modifiche complesse al template.
Post esistenti
Se lo hai fatto con un sito esistente che era su un sottodominio, scoprirai che i tuoi caricamenti sono interrotti. C’è uno strumento che può aiutare a correggere tutti i percorsi per includere la sottocartella. Prima, entra nel container Docker e naviga nella directory 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 su una sottocartella, non può servire il suo file robots.txt per controllare quali route vengono sottoposte a scansione dai crawler web. I crawler cercheranno 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 su https://www.example.com/=SUBFOLDER=/robots.txt) e inserirlo nel file robots.txt del tuo sito principale.
Please discuss the merits of subfolder vs non-subfolder on separate topics.


