Cloudflare mit Subfolder-Einrichtung

Ich wollte nur die Schritte teilen, die ich unternommen habe, um einen Unterordner zusammen mit Cloudflare einzurichten, insbesondere wenn die Hauptwebsite bereits live ist und die Root-Domain nicht (auch nicht vorübergehend) auf den Forum-Server zeigen kann.

Wichtige Punkte

  • Die vorhandene meineWebsite.com zeigt derzeit auf 1.1.1.1 und ist live
  • Wir sollten meineWebsite.com/forum (und seine Unterverzeichnisse) auf 2.2.2.2 leiten
  • Da wir während der Discourse-Installation die Letsencrypt-Validierung (die prüft, ob die Domain den aktuellen Server auflöst) nicht durchführen können, sollten wir die DNS-Validierung verwenden

Änderungen in app.yml

Letsencrypt-Updates

Erstellen Sie eine neue Letsencrypt-Vorlage und legen Sie sie in app.yml gemäß diesem Thema fest: LetsEncrypt DNS Validation Template Using Cloudflare

Stellen Sie jedoch sicher, dass Sie nur die Methode issue_cert aus diesem Beitrag kopieren und den Rest des Inhalts aus der ursprünglichen web.letsencrypt.ssl.template.yml übernehmen (da diese nach der Veröffentlichung des Themas geändert wurde).

LETSENCRYPT_CF_TOKEN: ""
LETSENCRYPT_CF_ACCOUNT_ID: ""
LETSENCRYPT_CF_ZONE_ID: ""
LETSENCRYPT_DNS_PROVIDER: "dns_cf"
  • Sie können das Cloudflare-Token auf der Seite CF Mein Profil → “API Tokens” erstellen.
  • Account ID und Zone ID werden auf der Übersichtsseite der Domain angezeigt.
  • Lassen Sie den Wert des DNS-Anbieters wie oben angegeben.

Unterordner-Updates

Gemäß diesem Thema Serve Discourse from a subfolder (path prefix) instead of a subdomain setzen Sie DISCOURSE_RELATIVE_URL_ROOT: /forum unter env: und aktualisieren Sie den Abschnitt run:.
Beachten Sie diesen Beitrag für Benutzer-IPs: Serve Discourse from a subfolder (path prefix) instead of a subdomain - #111 by varun21

Neuaufbau

Nachdem Sie die app.yml geändert haben, um den Neuaufbau-Befehl auszuführen, müssen wir die Discourse-Prüfung überspringen, damit die Domain die IP des aktuellen Servers auflöst (da unsere meineWebsite.com bereits auf 1.1.1.1 zeigt und Discourse die Root-Domain prüft). Führen Sie dazu aus:

./launcher rebuild app --skip-connection-test

Cloudflare-Setup

Ich weiß, dass einige Leute empfehlen, Workers zu verwenden, um /forum auf 2.2.2.2 zu leiten. Ich fand es jedoch viel einfacher, dies mit Load Balancing zu tun. Mit Workers konnte ich CSS/JS-bezogene Probleme sowieso nicht lösen, auch nicht mit deaktiviertem Rocket Loader und ähnlichen Einstellungen. Also,

  • Aktivieren Sie den Load Balancer (unter Traffic)
  • Wählen Sie “Manage Pools” → “Create”
  • Erstellen Sie 2 Pools (für die Hauptwebsite und für das Forum), jeder sollte nur einen Endpunkt haben

  • Erstellen Sie einen Load Balancer, der Hostname sollte meineWebsite.com sein
  • Wählen Sie unter Endpunkte beide Pools aus
  • Überspringen Sie Monitore (da wir die Servergesundheit nicht überwachen müssen, sollte die Hauptwebsite immer auf 1.1.1.1 und das Forum auf 2.2.2.2 zeigen), überspringen Sie Traffic Steering (standardmäßig deaktiviert)
  • Erstellen Sie unter Custom Rule eine mit der Pfadbedingung /forum und leiten Sie sie auf den Forum-Endpunkt.

  • Speichern/Bereitstellen

Notizen

  • Aus irgendeinem Grund hat das Kopieren der Beispiel-app.yml und der anschließende Neuaufbau bei mir nicht funktioniert (wahrscheinlich habe ich etwas falsch gemacht). Als Lösung habe ich zum ersten Mal discourse-setup mit einer anderen Domain ausgeführt und dann, zusammen mit anderen app.yml-Änderungen, den Hostnamen geändert und den endgültigen Neuaufbau durchgeführt.
  • Discourse generiert 2 Zertifikate von Letsencrypt, RSA cert und ECDSA cert, und Letsencrypt hat ein Limit von 5 Zertifikaten pro exakter Domain pro Woche. Wenn Sie 2 Mal hintereinander etwas falsch machen, wird beim 3. Versuch nur ein Zertifikat ausgestellt und das Forum funktioniert nicht (Sie können das aktuelle Limit mit diesem Skript überprüfen GitHub - sahsanu/lectl: Script to check issued certificates by Let's Encrypt on CTL (Certificate Transparency Log) using https://crt.sh).
  • CF Load Balancer ist nicht kostenlos, aber wenn man die Kosten von (derzeit) 5 USD pro 500.000 DNS-Anfragen bedenkt, ist er meiner Meinung nach im Vergleich zum Aufwand mit Nginx usw. lohnenswert.