Offizielle Erklärung von Discourse zur Subfolder-Einrichtung
Wir unterstützen Subfolder-Einrichtungen für unsere gehosteten Kunden ab der Enterprise-Ebene. Aufgrund der hohen technischen Komplexität empfehlen wir dringend, diese Einrichtung nicht zu verwenden, es sei denn, Sie haben umfangreiche Erfahrung mit benutzerdefinierten Subfolder-Einrichtungen.
Es ist entscheidend, dass Sie ein tiefes Verständnis haben für
- NGINX-Einrichtung im Discourse-Docker-Container
- Sicheres Weiterleiten der ursprünglichen IP-Adresse mit benutzerdefinierten Headern in der Proxy-Kette
- Rate-Limiting am Frontend-Proxy-Server
Wenn all das für Sie seltsam und fremd klingt, empfehlen wir dringend, diese Einrichtung zu vermeiden.
Um Discourse aus einem Subfolder (auch bekannt als Pfad-Präfix) auf Ihrer Domain zu bedienen, wie https://www.example.com/=SUBFOLDER=, hier ist die Anleitung!
Docker-Konfiguration
Fügen Sie im env-Abschnitt Ihrer Docker-Container-yml-Datei die Einstellung DISCOURSE_RELATIVE_URL_ROOT mit dem gewünschten Subfolder hinzu. Stellen Sie sicher, dass es nicht mit einem / endet.
Das Bearbeiten dieses Feldes aktualisiert die gesamte Anleitung.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
Der run-Abschnitt benötigt einige Änderungen, um alle Discourse-Routen an den richtigen Ort zu leiten. Hier ist ein vollständiger run-Abschnitt mit Subfolder-Unterstützung:
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; # die IP-Adresse Ihres Upstream-Proxys
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header x-forwarded-for;
Für weitere Details zur Erhaltung der IP-Adresse des Endnutzers siehe Handling the "chain of trust" of the end user's real IP.
Nachdem Sie diese Änderungen vorgenommen haben, bootstrappen Sie Ihren Docker-Container wie üblich oder rebuilden Sie ihn, falls Sie einen bestehenden Container ändern.
./launcher bootstrap app
oder
./launcher rebuild app
Angehängt ist eine vollständige Beispiel-yml-Datei für einen eigenständigen Container:
subfolder-sample.yml (3.1 KB)
Bedenken bezüglich Rate-Limiting
Wenn Sie diese Einrichtung verwenden, möchten Sie wahrscheinlich Anfragen vor dem Erreichen von NGINX im Container rate-limiten. Das bedeutet, dass Sie wahrscheinlich unser Rate-Limiting-Template nicht verwenden sollten. Es ist sehr schwierig, NGINX im Container so zu konfigurieren, dass es auf einer umgemappten IP limitiert, und würde komplexe Änderungen am Template erfordern.
Bestehende Beiträge
Wenn Sie dies mit einer bestehenden Site gemacht haben, die sich auf einem Subdomain befand, werden Sie feststellen, dass Ihre Uploads nicht mehr funktionieren. Es gibt ein Tool, das helfen kann, alle Pfade so anzupassen, dass sie den Subfolder enthalten. Gehen Sie zunächst in den Docker-Container und navigieren Sie zum Discourse-Verzeichnis:
cd /var/discourse
./launcher enter app
cd /var/www/discourse
Führen Sie dann den Remap-Befehl aus, nachdem Sie ein Backup erstellt haben:
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
Siehe auch: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain für weitere exotische Einrichtungen.
robots.txt
Da Discourse nun in einem Subfolder läuft, kann es seine robots.txt-Datei nicht bereitstellen, um zu steuern, welche Routen von Web-Crawlern durchsucht werden. Die Crawler werden die robots.txt-Datei Ihrer Hauptseite (https://www.example.com/robots.txt) überprüfen. Sie müssen den Inhalt der robots.txt-Datei von Discourse (zu finden unter https://www.example.com/=SUBFOLDER=/robots.txt) kopieren und in die robots.txt-Datei Ihrer Hauptseite einfügen.