CDN de Laravel Forge Bunny

Configuración de CDN con Laravel Forge: una guía completa de producción

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

🤓😎 Cada vez más personas reciben nuestros consejos sobre Geek, Privacidad, Desarrollo y Estilo de Vida.

¿Quieres recibir las últimas novedades de los blogs sobre tecnología, privacidad, desarrollo y estilo de vida? Suscríbete a nuestro boletín.

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:

  1. Vaya a la configuración de su sitio
  2. En “Alias”, agregue servidor.ejemplo.com
  3. 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:

  1. Vaya a SSL → Let's Encrypt en Forge
  2. Agregar un certificado para servidor.ejemplo.com
  3. 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

  1. Iniciar sesión en Bunny CDN
  2. 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

Configurar nombre de host personalizado

  1. En la configuración de la zona de extracción → Nombres de host
  2. Añade tus dominios:
    • ejemplo.com
    • www.ejemplo.com (si es necesario)

Habilitar SSL

  1. Vaya a la configuración del certificado SSL
  2. Habilite “Certificado SSL gratuito” (o cargue el suyo propio)
  3. Espere el aprovisionamiento (normalmente de 2 a 5 minutos)
  4. 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é:

  1. Área de administración: Coincidencias de rutas /administración/* → Omitir caché
  2. Rutas API: Coincidencias de rutas /api/* → Omitir caché
  3. 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

  1. Propagación de DNS: Usar Busque example.com para verificar CNAME
  2. Certificado SSL: Controlar https://example.com muestra el certificado de Bunny
  3. Protección del origen:Intenta acceder https://server.example.com directamente (debería redirigir)
  4. Encabezados de caché:Utilice las herramientas de desarrollo del navegador para verificar los encabezados de caché
  5. 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.com en .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

Última actualización: 3 de septiembre de 2025

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESEspañol
Ir arriba