En esta guía, te guiaré en la configuración de Bunny CDN frente a tu aplicación Laravel alojada en Forge (o cualquier otro servidor), manteniendo los certificados SSL de Let's Encrypt e implementando las medidas de seguridad adecuadas. ¿Lo mejor? La configuración es sorprendentemente sencilla: solo requiere unos pocos cambios de DNS y una redirección PHP de 5 líneas. Sin configuraciones complejas de nginx ni cambios de middleware, simplemente una implementación sencilla.
¿Por qué Bunny CDN?
Antes de sumergirnos en la configuración técnica, analicemos rápidamente por qué Conejito CDN es una excelente opción para aplicaciones Laravel:
- Rentable:A partir de solo $0.01/GB, es una de las CDN más asequibles.
- Presencia globalMás de 100 PoP en todo el mundo garantizan una entrega rápida de contenido
- Fácil integración:Configuración sencilla con excelente documentación
- Actuación:Optimización de imágenes integrada, compresión Brotli y compatibilidad con HTTP/3
- Amigable para desarrolladores:API potente y reglas de borde para un control detallado
- CDN europea:Cumple con el RGPD
El desafío de la arquitectura
Al configurar una CDN, nos enfrentamos a un reto interesante: ¿cómo apuntamos nuestro dominio a la CDN mientras esta necesita extraer contenido de nuestro servidor? Si simplemente apuntamos... ejemplo.com a Bunny CDN y dile a Bunny que lo extraiga de ejemplo.com, creamos un bucle infinito.
¿La solución? Crear un subdominio de origen independiente que Conejito CDN puede extraer desde su dominio principal mientras apunta al CDN.
Aquí está nuestra arquitectura objetivo:
Usuario → ejemplo.com → Bunny CDN → servidor.ejemplo.com → Laravel/Forge (CNAME) (Extracción) (Registro A) (Origen)Paso 1: Prepara tu configuración de Laravel Forge
Primero, necesitamos configurar nuestro sitio Forge para responder a un subdominio de origen.
Agregar el subdominio de origen
En Laravel Forge:
- Vaya a la configuración de su sitio
- En “Alias”, agregue
servidor.ejemplo.com - Esto actualiza su configuración de nginx para aceptar solicitudes para este subdominio
Instalar Let's Encrypt SSL
Necesitamos SSL en nuestro origen para una comunicación segura con Bunny CDN:
- Vaya a SSL → Let's Encrypt en Forge
- Agregar un certificado para
servidor.ejemplo.com - Activar el certificado
La belleza de este enfoque es que la renovación de Let's Encrypt continúa funcionando perfectamente ya que el subdominio apunta directamente a su servidor.
Paso 2: Configurar registros DNS
En su proveedor de DNS, cree estos registros:
Tipo Nombre Valor Propósito Un servidor YOUR_SERVER_IP Acceso de origen directo CNAME @ yourzone.b-cdn.net Dominio principal a través de CDN CNAME www yourzone.b-cdn.net WWW a través de CDN (opcional)NotaAlgunos proveedores de DNS no admiten CNAME para dominios raíz. En ese caso, considere usar Cloudflare (con el proxy deshabilitado) o el servicio DNS de Bunny, que admiten la simplificación de CNAME.
Paso 3: Configurar Bunny CDN
Crear una zona de atracción
- Iniciar sesión en Bunny CDN
- Crear una nueva zona de extracción:
- URL de origen:
https://server.example.com - Nombre de la zona de extracción:Elige algo descriptivo
- Permitir Certificado SSL
- URL de origen:
Configurar nombre de host personalizado
- En la configuración de la zona de extracción → Nombres de host
- Añade tus dominios:
ejemplo.comwww.ejemplo.com(si es necesario)
Habilitar SSL
- Vaya a la configuración del certificado SSL
- Habilite “Certificado SSL gratuito” (o cargue el suyo propio)
- Espere el aprovisionamiento (normalmente de 2 a 5 minutos)
- Habilite “Forzar SSL” para redirigir HTTP a HTTPS
Paso 4: Implementar la seguridad de origen
Desde servidor.ejemplo.com Ahora es de acceso público, por lo que debemos asegurarnos de que solo Bunny CDN pueda acceder a él. Esta es la solución que funciona a la perfección:
La solución simple de redireccionamiento de PHP
Añade esto en la parte superior de tu público/index.php:
/* |--------------------------------------------------------------------------- | Redirigir acceso directo al origen |--------------------------------------------------------------------------- | | Redirigir todas las solicitudes a server.example.com al dominio principal | mientras se conserva la ruta completa y los parámetros de consulta. | */ if (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] === 'server.example.com') { header("HTTP/1.1 301 Moved Permanently"); header("Location: https://example.com" . $_SERVER['REQUEST_URI']); exit(); }Esta elegante solución:
- Redirecciona a los visitantes directos a la URL del CDN
- Conserva la ruta solicitada y las cadenas de consulta.
- Funciona sin necesidad de configuración
- Bunny CDN ignora las redirecciones al extraer contenido
- No se necesita configuración de nginx
- No se requiere una validación de encabezado compleja
¿Por qué funciona esto?Bunny CDN no sigue redirecciones al extraer contenido de tu origen, por lo que lo obtendrá correctamente. Mientras tanto, cualquier persona o bot que acceda directamente al origen será redirigido a la URL correcta de CDN.
Alternativa: Redirección de nivel de Nginx
Si prefieres manejar esto a nivel de nginx, puedes agregarlo a tu bloque de servidor en Forge:
nginx (no he probado esto, solo el anterior)
servidor { escuchar 443 ssl http2; nombre_servidor server.example.com; # Redirigir el acceso directo a la URL de CDN si ($http_user_agent !~* "BunnyCDN") { devolver 301 https://example.com$request_uri; } # Resto de su configuración de Laravel... }Nota:Si bien Bunny CDN admite encabezados personalizados como Llave de extracción XEn la práctica, el método de redirección simple es más confiable y requiere menos configuración.
Paso 5: Configurar Laravel para CDN
La ventaja de esta configuración es que Laravel requiere una configuración mínima. En la mayoría de los casos, solo necesitas asegurarte de que tus variables de entorno sean correctas:
Configuración del entorno
Actualiza tu .env:
entorno
URL_APLICACIÓN=https://ejemplo.com URL_ACTIVO=https://ejemplo.com¡Listo! Laravel funcionará a la perfección con la CDN sin necesidad de configurar TrustProxies en la mayoría de los casos.
Encabezados de caché para activos estáticos (opcional)
Para un mejor rendimiento de la caché, puede agregar encabezados de control de caché en su público/.htaccess (si nginx usa reglas diferentes):
apache
# Imágenes de caché durante 1 año Encabezado establecido Cache-Control "public, max-age=31536000" # Caché CSS/JS durante 1 mes Encabezado establecido Cache-Control "public, max-age=2592000"Sin embargo, el comportamiento de almacenamiento en caché predeterminado de Bunny CDN suele ser suficiente para la mayoría de las aplicaciones.
Paso 6: Optimizar la configuración de Bunny CDN
Configurar reglas de borde
Crear reglas para contenido dinámico que no debe almacenarse en caché:
- Área de administración: Coincidencias de rutas
/administración/*→ Omitir caché - Rutas API: Coincidencias de rutas
/api/*→ Omitir caché - Rutas de autenticación: Coincidencias de rutas
/acceso,/registro→ Omitir caché
Habilitar funciones de rendimiento (costo adicional)
- Optimizador de conejitos:Optimiza automáticamente imágenes, CSS y JavaScript
- WebP: Sirve imágenes WebP a navegadores compatibles
- Compresión de brotli:Mejor compresión que gzip
- HTTP/3:Último protocolo para un mejor rendimiento
Paso 7: Pruebas y monitoreo
Corrección del código CSRF 419
Lo más probable es que los formularios CSRF aún no funcionen y muestren un código de estado 419, debido a esta configuración:
[X] Eliminar cookies de respuesta. Si se habilita esta función, bunny.net eliminará todos los encabezados Set-Cookie del nombre de host de la zona. Habilite esta función si necesita un dominio sin cookies.Desactive esta casilla de verificación:

Verifique su configuración
- Propagación de DNS: Usar
Busque example.compara verificar CNAME - Certificado SSL: Controlar https://example.com muestra el certificado de Bunny
- Protección del origen:Intenta acceder https://server.example.com directamente (debería redirigir)
- Encabezados de caché:Utilice las herramientas de desarrollo del navegador para verificar los encabezados de caché
- Contenido dinámico:Pruebe el inicio de sesión, los formularios y las áreas autenticadas
Monitorizar el rendimiento
Consulte estas métricas en el panel de Bunny CDN:
- Tasa de aciertos de caché:Debe ser superior a 80% para un rendimiento óptimo
- Ancho de banda ahorrado:Muestra reducción en el tráfico de origen
- Tiempos de respuesta: Comparar los tiempos de respuesta del borde y del origen
Problemas comunes y soluciones
Las sesiones no funcionan
- Problema:Sesiones perdidas entre solicitudes
- Solución: Asegurar
DOMINIO_DE_SESIÓN=.ejemplo.comen.env
Problemas de CORS
- Problema:Solicitudes de fuentes o AJAX bloqueadas
- Solución:Agregar encabezados CORS en las reglas de borde de Laravel o Bunny
Solicitudes POST fallidas
- ProblemaLos envíos de formularios devuelven errores 405
- Solución:Asegurarse de que las solicitudes POST omitan el caché en las reglas de borde
Contenido obsoleto después de la implementación
- Problema: Activos antiguos atendidos después del despliegue
- Solución:Implementar la eliminación de caché con el control de versiones de Laravel Mix
Conclusión
Configurar Bunny CDN con Laravel Forge es sorprendentemente sencillo y ofrece un excelente equilibrio entre rendimiento, coste y facilidad de mantenimiento. El patrón de subdominio de origen resuelve con elegancia el problema del enrutamiento, manteniendo la simplicidad de los certificados Let's Encrypt a través de Forge.
La sencilla solución de redirección PHP para proteger el origen es especialmente elegante: no requiere configuración de nginx ni validación compleja de encabezados, y funciona de inmediato. Ofrece una experiencia fluida para cualquier usuario que acceda accidentalmente al origen directamente, mientras que Bunny CDN continúa extrayendo contenido sin problemas.
Lo destacable de esta configuración es lo que... no Es necesario configurar:
- No hay cambios en el middleware de TrustProxies
- Sin reglas complejas de nginx
- Sin complicaciones de autenticación de encabezado
- No hay servicios de almacenamiento adicionales
Sólo una simple redirección en índice.php ¡Y ya está!
Recuerde:
- Comience con reglas básicas de almacenamiento en caché y refine según sus necesidades
- Monitorea tu tasa de aciertos de caché y ajústala en consecuencia
- Implementar la purga de caché para actualizaciones de contenido
- Pruebe exhaustivamente, especialmente las funciones dinámicas
Con esta configuración mínima, obtienes una entrega de contenido de nivel empresarial a una fracción del costo, al tiempo que mantienes el flujo de trabajo de Laravel Forge amigable para desarrolladores que conoces y amas.
Recursos
- Documentación de Bunny CDN
- Documentación de Laravel Forge
- Documentación de la API de CDN de Bunny (para purgar caché)
Última actualización: 3 de septiembre de 2025
