Publica tu documentación en una subcarpeta con Cloudflare
Sigue esta guía para alojar tu centro de ayuda de Ferndesk en una subcarpeta personalizada (como yourdomain.com/help) utilizando Cloudflare Workers como proxy inverso.
Esto lleva aproximadamente 10 minutos y requiere pocos conocimientos técnicos. La hemos redactado para que sea lo más fácil de seguir posible.
¿Te has quedado atascado? Contacta con [email protected] y te ayudaremos a completar la configuración.
Requisitos previos
Un espacio de trabajo de Ferndesk con acceso de administrador
Un dominio de tu propiedad (ya apuntado a Cloudflare)
Conocimientos básicos del panel de Cloudflare
La configuración de una subcarpeta personalizada requiere tener un método de pago activo registrado.
El plan gratuito de Cloudflare permite 100.000 solicitudes de Worker al día. Para centros de ayuda en producción con mucho tráfico, considera actualizar a un plan de pago con facturación por uso.
Paso 1: Configura la subcarpeta personalizada en Ferndesk
Primero, configura tu centro de ayuda de Ferndesk para que utilice una ruta de subcarpeta personalizada.
Inicia sesión en tu espacio de trabajo de Ferndesk, expande Help Center en la barra lateral izquierda y haz clic en Customize.
Haz clic en Custom domain
Selecciona la opción Custom sub-folder
Introduce tu dominio en el campo Domain (por ejemplo,
yourdomain.com).Introduce la ruta de subcarpeta que quieras en el campo Subdirectory (por ejemplo,
/helpo/docs).Haz clic en Configure sub-folder.
Una vez configurado, Ferndesk generará los registros DNS y la información del endpoint necesarios. Anota estos datos: los utilizarás al configurar el proxy inverso.
Paso 2: Crea un Cloudflare Worker
Ahora crea un Cloudflare Worker nuevo que actuará como proxy inverso.
Inicia sesión en tu panel de Cloudflare.
En BUILD → Compute & AI, navega a Workers & Pages desde la barra lateral .
Haz clic en Create application en la esquina superior derecha.
En Start with Hello World!, haz clic en Get started.
Asigna a tu Worker un nombre descriptivo, como
ferndesk-reverse-proxy, y haz clic en Deploy.
Paso 3: Configura las rutas del Worker
Configura la regla de enrutamiento que dirige el tráfico desde tu subcarpeta personalizada al Cloudflare Worker.
En la configuración del Worker, ve a la pestaña Settings.
Desplázate hasta Domains & Routes y haz clic en Add.
Se abrirá una ventana modal. Selecciona la opción Route.
En el menú desplegable Zone, selecciona tu dominio (por ejemplo,
yourdomain.com).En el campo Route, introduce el patrón de tu ruta de subcarpeta. Usa
yourdomain.com/helppara capturar todas las solicitudes a la ruta/helpy sus subrutas.Por motivos de seguridad, deja Failure mode configurado como Fail closed (block).
Haz clic en Add route.
IMPORTANTE: Debes añadir una ruta independiente para el directorio de recursos de Ferndesk _ferndesk. Sigue los pasos que se indican a continuación para completar la configuración.
Paso 3b: Añade la ruta _ferndesk
Desplázate hasta Domains & Routes y haz clic en Add.
Se abrirá una ventana modal. Selecciona la opción Route.
En el menú desplegable Zone, selecciona tu dominio (por ejemplo,
yourdomain.com).En el campo Route, introduce el patrón de tu ruta de subcarpeta. Usa
yourdomain.com/_ferndeskpara capturar todas las solicitudes a la ruta/_ferndesky sus subrutas.Por motivos de seguridad, deja Failure mode configurado como Fail closed (block).
Haz clic en Add route.
Paso 4: Edita el código del Worker
Ahora actualiza el código del Worker para gestionar la lógica del proxy inverso. El Worker interceptará las solicitudes a tu subcarpeta y las reenviará a Ferndesk.
Haz clic en Edit code (o accede al editor de código desde el panel del Worker).
Reemplaza todo el código de
worker.jspor el script de proxy inverso que aparece a continuación.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; }Reemplaza
HELP_HOSTpor el dominio real de Ferndesk que se proporcionó al configurar la subcarpeta personalizada. ReemplazaPROXY_PREFIXsi utilizas una ruta de subcarpeta diferente (por ejemplo,/docsen lugar de/help).¿Ya configuraste tu subcarpeta hace algún tiempo? Simplemente reemplaza el código de tu Worker por la versión anterior. Todo seguirá funcionando exactamente igual y las páginas de tu centro de ayuda comenzarán a servirse desde nuestra red perimetral, normalmente en menos de 100 ms.
Haz clic en Deploy para publicar los cambios.
Paso 5: Verifica la configuración
Comprueba que tu centro de ayuda ya esté accesible en la ruta de tu subcarpeta personalizada.
Abre una pestaña nueva del navegador y ve a
https://yourdomain.com/help.Deberías ver tu centro de ayuda de Ferndesk cargado con tu identidad de marca.
Prueba varias páginas haciendo clic en los enlaces para asegurarte de que la navegación funciona correctamente.
Si tu centro de ayuda se carga correctamente y muestra tu contenido, ¡el proxy inverso funciona correctamente! Tus clientes ya pueden acceder a tu centro de ayuda desde tu dominio personalizado.
¿Algo salió mal? Contacta con nosotros en [email protected] y te ayudaremos a completar la configuración.
Solución de problemas
Problema | Causa | Solución |
|---|---|---|
Error 404 Not Found al visitar la URL | La ruta no está configurada correctamente o el Worker no está implementado | Verifica que el patrón de la ruta coincida exactamente con tu dominio y la ruta de la subcarpeta. Comprueba que el Worker esté implementado y activo en la sección Domains & Routes. |
Página en blanco o estilos dañados | El dominio de Ferndesk en el código del Worker es incorrecto | Comprueba de nuevo que la variable |
No se cargan el CSS ni las imágenes | Las URL relativas de la respuesta de Ferndesk no se están reescribiendo | Es posible que debas añadir la reescritura de las cabeceras de respuesta para gestionar los recursos relativos. Contacta con el soporte de Ferndesk para obtener una configuración avanzada del proxy. |
Solicitudes del Worker limitadas a 100.000 al día | Se alcanzó el límite de solicitudes del plan gratuito de Cloudflare | Actualiza tu plan de Cloudflare a una facturación por uso para obtener solicitudes ilimitadas más allá del nivel gratuito. |