Platziere deine Docs in einem Unterordner mit Cloudflare
Folge dieser Anleitung, um dein Ferndesk Help Center in einem benutzerdefinierten Unterordner wie yourdomain.com/help mit Cloudflare Workers als Reverse-Proxy zu hosten.
Das dauert etwa 10 Minuten und erfordert nur wenig technisches Wissen. Wir haben den Leitfaden so einfach und verständlich wie möglich geschrieben.
Hängst du fest? Kontaktiere [email protected], und wir helfen dir, dein Setup abzuschließen.
Voraussetzungen
Ein Ferndesk-Workspace mit Admin-Zugriff
Eine Domain, die dir gehört (bereits auf Cloudflare verwiesen)
Grundkenntnisse im Cloudflare-Dashboard
Der kostenlose Plan von Cloudflare erlaubt 100.000 Worker-Anfragen pro Tag. Für Help Center mit hohem Traffic in der Produktion solltest du ein Upgrade auf einen kostenpflichtigen Plan mit nutzungsabhängiger Abrechnung in Betracht ziehen.
Schritt 1: Den benutzerdefinierten Unterordner in Ferndesk einrichten
Konfiguriere zuerst dein Ferndesk Help Center so, dass es einen benutzerdefinierten Unterordnerpfad verwendet.
Melde dich in deinem Ferndesk-Workspace an, erweitere Help Center in der linken Seitenleiste und klicke dann auf Customize.
Klicke auf Custom domain
Wähle die Option Custom sub-folder
Gib deine Domain im Feld Domain ein (z. B.
yourdomain.com).Gib den gewünschten Unterordnerpfad im Feld Subdirectory ein (z. B.
/helpoder/docs).Klicke auf Configure sub-folder.
Sobald alles konfiguriert ist, generiert Ferndesk die erforderlichen DNS-Einträge und Endpunktinformationen. Notiere dir diese Angaben — du brauchst sie später beim Einrichten des Reverse-Proxys.
Schritt 2: Einen Cloudflare Worker erstellen
Erstelle jetzt einen neuen Cloudflare Worker, der als Reverse-Proxy fungiert.
Melde dich im Cloudflare-Dashboard an.
Unter BUILD → Compute & AI, gehe in der linken Seitenleiste zu Workers & Pages.
Klicke oben rechts auf Create application.
Unter Start with Hello World! klicke auf Get started.
Gib deinem Worker einen aussagekräftigen Namen wie
ferndesk-reverse-proxyund klicke dann auf Deploy.
Schritt 3: Die Worker-Routen konfigurieren
Richte die Routing-Regel ein, die den Traffic von deinem benutzerdefinierten Unterordner an den Cloudflare Worker weiterleitet.
Navigiere in den Worker-Einstellungen zum Tab Settings.
Scrolle zu Domains & Routes und klicke auf Add.
Ein modales Fenster öffnet sich. Wähle die Option Route.
Wähle im Dropdown Zone deine Domain aus (z. B.
yourdomain.com).Gib im Feld Route das Muster für deinen Unterordnerpfad ein. Verwende
yourdomain.com/help, um alle Anfragen an den Pfad/helpund seine Unterpfade zu erfassen.Lasse Failure mode aus Sicherheitsgründen auf Fail closed (block) eingestellt.
Klicke auf Add route.
WICHTIG: Du musst eine separate Route für das Ferndesk-Assets-Verzeichnis _ferndesk hinzufügen. Folge den Schritten unten, um dein Setup abzuschließen.
Schritt 3b: Die Route _ferndesk hinzufügen
Scrolle zu Domains & Routes und klicke auf Add.
Ein modales Fenster öffnet sich. Wähle die Option Route.
Wähle im Dropdown Zone deine Domain aus (z. B.
yourdomain.com).Gib im Feld Route das Muster für deinen Unterordnerpfad ein. Verwende
yourdomain.com/_ferndesk, um alle Anfragen an den Pfad/_ferndeskund seine Unterpfade zu erfassen.Lasse Failure mode aus Sicherheitsgründen auf Fail closed (block) eingestellt.
Klicke auf Add route.
Schritt 4: Den Worker-Code bearbeiten
Aktualisiere jetzt den Worker-Code, damit die Reverse-Proxy-Logik funktioniert. Der Worker fängt Anfragen an deinen Unterordner ab und leitet sie an Ferndesk weiter.
Klicke auf Edit code (oder öffne den Code-Editor über das Worker-Dashboard).
Ersetze den gesamten Code in
worker.jsdurch das unten stehende Reverse-Proxy-Skript.const HELP_HOST = 'your-company.hc.ferndesk.com'; // your Ferndesk help domain const PROXY_PREFIX = '/help'; // the subfolder you chose in Ferndesk const PROXY_VERSION = '2'; addEventListener('fetch', (event) => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { const originalUrl = new URL(request.url); // Keep canonical trailing-slash behaviour on the edge if (originalUrl.pathname.endsWith('/') && originalUrl.pathname !== '/') { originalUrl.pathname = originalUrl.pathname.slice(0, -1); return Response.redirect(originalUrl.toString(), 301); } // Only intercept the help subtree (and the help assets) if ( originalUrl.pathname !== PROXY_PREFIX && !originalUrl.pathname.startsWith(`${PROXY_PREFIX}/`) && !originalUrl.pathname.startsWith('/_ferndesk/') ) { return fetch(request); } // Build the upstream request with the prefix removed const upstreamUrl = new URL(originalUrl.toString()); upstreamUrl.hostname = HELP_HOST; if (upstreamUrl.pathname === PROXY_PREFIX) { upstreamUrl.pathname = '/'; } else if (upstreamUrl.pathname.startsWith(`${PROXY_PREFIX}/`)) { upstreamUrl.pathname = upstreamUrl.pathname.slice(PROXY_PREFIX.length) || '/'; } // Enables edge caching: tells Ferndesk this render belongs to your // subfolder so it gets its own cache entry. upstreamUrl.searchParams.set('__bp', PROXY_PREFIX); const proxyRequest = new Request(upstreamUrl.toString(), request); // Let the help app know we are hosted under the subfolder proxyRequest.headers.set('X-Ferndesk-Base-Path', PROXY_PREFIX); proxyRequest.headers.set('X-Forwarded-Host', originalUrl.host); proxyRequest.headers.set('X-Ferndesk-Original-Host', originalUrl.host); proxyRequest.headers.set('X-Ferndesk-Proxy-Version', PROXY_VERSION); // Handle redirects ourselves so renamed articles redirect visitors on // this domain instead of being followed silently. const response = await fetch(proxyRequest, { redirect: 'manual' }); if (response.status >= 300 && response.status < 400) { return rewriteRedirect(response, originalUrl); } return response; } // Translates an upstream redirect (on the Ferndesk help host) back onto // this site's host and subfolder. External redirects pass through as-is. function rewriteRedirect(response, originalUrl) { const location = response.headers.get('location'); if (!location) return response; const target = new URL(location, `https://${HELP_HOST}`); if (target.hostname !== HELP_HOST) return response; target.protocol = 'https:'; target.host = originalUrl.host; target.searchParams.delete('__bp'); const alreadyPrefixed = target.pathname === PROXY_PREFIX || target.pathname.startsWith(`${PROXY_PREFIX}/`); if (!alreadyPrefixed) { target.pathname = target.pathname === '/' ? PROXY_PREFIX : PROXY_PREFIX + target.pathname; } // Response headers from fetch are immutable; copy to edit Location. const rewritten = new Response(response.body, response); rewritten.headers.set('location', target.toString()); return rewritten; }Ersetze
HELP_HOSTdurch die tatsächliche Ferndesk-Domain, die dir bei der Konfiguration deines benutzerdefinierten Unterordners bereitgestellt wurde. ErsetzePROXY_PREFIX, wenn du einen anderen Unterordnerpfad verwendest (z. B./docsstatt/help).Hast du deinen Unterordner schon vor einiger Zeit eingerichtet? Ersetze einfach deinen Worker-Code durch die obige Version. Alles funktioniert weiterhin wie bisher, und deine Help-Center-Seiten werden nun über unser Edge-Netzwerk ausgeliefert, typischerweise mit Ladezeiten unter 100 ms.
Klicke auf Deploy, um deine Änderungen zu veröffentlichen.
Schritt 5: Das Setup überprüfen
Teste, ob dein Help Center jetzt unter deinem benutzerdefinierten Unterordnerpfad erreichbar ist.
Öffne einen neuen Browser-Tab und rufe
https://yourdomain.com/helpauf.Du solltest sehen, wie dein Ferndesk Help Center mit deinem Branding geladen wird.
Teste ein paar Seiten, indem du auf Links klickst, um sicherzustellen, dass die Navigation korrekt funktioniert.
Wenn dein Help Center erfolgreich lädt und deine Inhalte anzeigt, funktioniert der Reverse-Proxy korrekt! Deine Kunden können jetzt über deine benutzerdefinierte Domain auf dein Help Center zugreifen.
Etwas ist schiefgelaufen? Kontaktiere uns unter [email protected], und wir helfen dir, dein Setup abzuschließen.
Fehlerbehebung
Problem | Ursache | Lösung |
|---|---|---|
404-Fehler „Not Found“ beim Aufrufen der URL | Route ist nicht korrekt konfiguriert oder der Worker wurde nicht bereitgestellt | Überprüfe, ob das Route-Muster genau mit deiner Domain und dem Unterordnerpfad übereinstimmt. Stelle sicher, dass der Worker im Bereich Domains & Routes bereitgestellt und aktiv ist. |
Leere Seite oder fehlerhafte Formatierung | Ferndesk-Domain im Worker-Code ist falsch | Überprüfe genau, ob die Variable |
CSS und Bilder werden nicht geladen | Relative URLs in der Ferndesk-Antwort werden nicht umgeschrieben | Möglicherweise musst du das Umschreiben von Response-Headern hinzufügen, um relative Assets zu verarbeiten. Kontaktiere den Ferndesk-Support für eine erweiterte Proxy-Konfiguration. |
Worker-Anfragen auf 100.000/Tag begrenzt | Rate-Limit des kostenlosen Cloudflare-Plans erreicht | Upgrade deinen Cloudflare-Plan auf nutzungsabhängige Abrechnung für unbegrenzte Anfragen über das kostenlose Kontingent hinaus. |