Dans ce guide, je vous expliquerai comment configurer Bunny CDN devant votre application Laravel hébergée sur Forge (ou tout autre serveur), tout en maintenant les certificats SSL Let's Encrypt et en mettant en œuvre des mesures de sécurité appropriées. Le plus ? L'installation est étonnamment simple : quelques modifications DNS et une redirection PHP de 5 lignes suffisent. Pas de configurations Nginx complexes, pas de modification du middleware, juste une implémentation simple.
Pourquoi Bunny CDN ?
Avant de plonger dans la configuration technique, discutons rapidement des raisons pour lesquelles Bunny CDN est un excellent choix pour les applications Laravel :
- Rentable:À partir de seulement $0.01/Go, c'est l'un des CDN les plus abordables
- Présence mondiale: Plus de 100 PoP dans le monde entier garantissent une diffusion rapide du contenu
- Intégration facile:Configuration simple avec une excellente documentation
- Performance:Optimisation d'image intégrée, compression Brotli et prise en charge HTTP/3
- Convivial pour les développeurs: API puissante et règles de périphérie pour un contrôle précis
- CDN européen:Conforme au RGPD
Le défi de l'architecture
Lors de la configuration d'un CDN, nous sommes confrontés à un défi intéressant : comment pointer notre domaine vers le CDN, alors que celui-ci doit extraire le contenu de notre serveur ? Si nous pointons simplement exemple.com à Bunny CDN et dites à Bunny de se retirer de exemple.com, nous créons une boucle infinie.
La solution ? Créer un sous-domaine d'origine distinct qui Bunny CDN peut être extrait pendant que votre domaine principal pointe vers le CDN.
Voici notre architecture cible :
Utilisateur → example.com → Bunny CDN → server.example.com → Laravel/Forge (CNAME) (Pull) (Enregistrement A) (Origine)Étape 1 : Préparez votre configuration Laravel Forge
Tout d’abord, nous devons configurer notre site Forge pour répondre à un sous-domaine d’origine.
Ajouter le sous-domaine d'origine
Dans Laravel Forge :
- Accédez aux paramètres de votre site
- Sous « Alias », ajoutez
serveur.exemple.com - Cela met à jour votre configuration nginx pour accepter les demandes pour ce sous-domaine
Installer Let's Encrypt SSL
Nous avons besoin de SSL sur notre origine pour une communication sécurisée avec Bunny CDN :
- Accéder à SSL → Let's Encrypt dans Forge
- Ajouter un certificat pour
serveur.exemple.com - Activer le certificat
La beauté de cette approche est que le renouvellement de Let's Encrypt continue de fonctionner parfaitement puisque le sous-domaine pointe directement vers votre serveur.
Étape 2 : Configurer les enregistrements DNS
Chez votre fournisseur DNS, créez ces enregistrements :
Type Nom Valeur Objectif Un serveur YOUR_SERVER_IP Accès direct à l'origine CNAME @ yourzone.b-cdn.net Domaine principal via CDN CNAME www yourzone.b-cdn.net WWW via CDN (facultatif)NoteCertains fournisseurs DNS ne prennent pas en charge CNAME pour les domaines racine. Si tel est votre cas, envisagez d'utiliser Cloudflare (avec proxy désactivé) ou le service DNS de Bunny, qui prennent tous deux en charge l'aplatissement CNAME.
Étape 3 : Configurer Bunny CDN
Créer une zone de tirage
- Connectez-vous à Bunny CDN
- Créer une nouvelle zone de traction :
- URL d'origine:
https://server.example.com - Nom de la zone de traction: Choisissez quelque chose de descriptif
- Activer Certificat SSL
- URL d'origine:
Configurer un nom d'hôte personnalisé
- Dans les paramètres de la zone d'extraction → Noms d'hôtes
- Ajoutez vos domaines :
exemple.comwww.exemple.com(si nécessaire)
Activer SSL
- Accédez aux paramètres du certificat SSL
- Activez le « Certificat SSL gratuit » (ou téléchargez le vôtre)
- Attendez le provisionnement (généralement 2 à 5 minutes)
- Activez « Forcer SSL » pour rediriger HTTP vers HTTPS
Étape 4 : Mettre en œuvre la sécurité d’origine
Depuis serveur.exemple.com est désormais accessible au public. Nous devons donc nous assurer que seul Bunny CDN peut y accéder. Voici la solution idéale :
La solution simple de redirection PHP
Ajoutez ceci en haut de votre public/index.php:
/* |-------------------------------------------------------------------------- | Rediriger l'accès direct à l'origine |-------------------------------------------------------------------------- | | Rediriger toutes les requêtes vers server.example.com vers le domaine principal | tout en préservant le chemin complet et les paramètres de requête. | */ 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(); }Cette solution élégante :
- Redirige les visiteurs directs vers l'URL du CDN
- Préserve le chemin demandé et les chaînes de requête
- Fonctionne sans configuration
- Bunny CDN ignore les redirections lors de l'extraction de contenu
- Aucune configuration nginx requise
- Aucune validation d'en-tête complexe requise
Pourquoi cela fonctionneBunny CDN ne suit pas les redirections lors de l'extraction du contenu depuis votre source ; il le récupère donc avec succès. En revanche, tout utilisateur ou robot accédant directement à la source est redirigé vers l'URL du CDN appropriée.
Alternative : redirection de niveau Nginx
Si vous préférez gérer cela au niveau nginx, vous pouvez ajouter ceci à votre bloc serveur dans Forge :
nginx (je n'ai pas testé celui-ci, seulement celui ci-dessus)
serveur { listen 443 ssl http2; server_name server.example.com; # Rediriger l'accès direct à l'URL du CDN si ($http_user_agent !~* "BunnyCDN") { return 301 https://example.com$request_uri; } # Reste de votre configuration Laravel... }Note:Alors que Bunny CDN prend en charge les en-têtes personnalisés comme Clé à tirer X, en pratique, la méthode de redirection simple est plus fiable et nécessite moins de configuration.
Étape 5 : Configurer Laravel pour le CDN
L'avantage de cette configuration est que Laravel nécessite une configuration minimale. Dans la plupart des cas, il suffit de vérifier que vos variables d'environnement sont correctes :
Configuration de l'environnement
Mettez à jour votre .env:
env
APP_URL=https://example.com ASSET_URL=https://example.comVoilà ! Laravel fonctionnera parfaitement avec le CDN sans nécessiter de configuration TrustProxies dans la plupart des cas d'utilisation.
En-têtes de cache pour les ressources statiques (facultatif)
Pour de meilleures performances de cache, vous pouvez ajouter des en-têtes de contrôle de cache dans votre public/.htaccess (si nginx utilise des règles différentes) :
Apache
# Cache d'images pendant 1 an Ensemble d'en-têtes Cache-Control « public, max-age=31536000 » # Cache CSS/JS pendant 1 mois Ensemble d'en-têtes Cache-Control « public, max-age=2592000 »Cependant, le comportement de mise en cache par défaut de Bunny CDN est généralement suffisant pour la plupart des applications.
Étape 6 : Optimiser les paramètres de Bunny CDN
Configurer les règles Edge
Créez des règles pour le contenu dynamique qui ne doit pas être mis en cache :
- Zone d'administration: Correspondances de chemin
/admin/*→ Contourner le cache - Routes API: Correspondances de chemin
/api/*→ Contourner le cache - Routes d'autorisation: Correspondances de chemin
/se connecter,/registre→ Contourner le cache
Activer les fonctionnalités de performance (coûts supplémentaires)
- Optimiseur de lapin:Optimise automatiquement les images, CSS et JavaScript
- WebP: Fournit des images WebP aux navigateurs pris en charge
- Compression Brotli: Meilleure compression que gzip
- HTTP/3: Dernier protocole pour des performances améliorées
Étape 7 : Tests et surveillance
Code de correction CSRF 419
Il est fort probable que les formulaires CSRF ne fonctionneront pas encore et donneront un code d'état 419, en raison de ce paramètre :
[X] Supprimer les cookies de réponse Si cette option est activée, bunny.net supprimera tous les en-têtes Set-Cookie du nom d'hôte de la zone. Activez cette fonctionnalité si vous avez besoin d'un domaine sans cookie.Décochez cette case :

Vérifiez votre configuration
- Propagation DNS: Utiliser
creuser example.compour vérifier CNAME - Certificat SSL: Vérifier https://example.com montre le certificat de Bunny
- Protection de l'origine: Essayez d'accéder https://server.example.com directement (devrait rediriger)
- En-têtes de cache:Utilisez les outils de développement du navigateur pour vérifier les en-têtes de cache
- Contenu dynamique: Tester la connexion, les formulaires et les zones authentifiées
Surveiller les performances
Vérifiez ces métriques dans le tableau de bord Bunny CDN :
- Taux de réussite du cache:Doit être supérieur à 80% pour des performances optimales
- Bande passante économisée:Montre une réduction du trafic d'origine
- Temps de réponse: Comparer les temps de réponse de l'extrémité et de l'origine
Problèmes courants et solutions
Les sessions ne fonctionnent pas
- Problème: Sessions perdues entre les requêtes
- Solution: Assurer
SESSION_DOMAIN=.example.comdans.env
Problèmes CORS
- Problème: Polices ou requêtes AJAX bloquées
- Solution:Ajouter des en-têtes CORS dans les règles Laravel ou Bunny Edge
Échec des requêtes POST
- Problème: Les soumissions de formulaires renvoient des erreurs 405
- Solution: Assurez-vous que les requêtes POST contournent le cache dans les règles de périphérie
Contenu obsolète après le déploiement
- Problème:Anciens actifs servis après le déploiement
- Solution: Implémenter le contournement du cache avec le versioning Laravel Mix
Conclusion
Configurer Bunny CDN avec Laravel Forge est étonnamment simple et offre un excellent équilibre entre performances, coût et facilité de maintenance. Le modèle de sous-domaine d'origine résout élégamment le problème de routage tout en préservant la simplicité des certificats Let's Encrypt via Forge.
La solution simple de redirection PHP pour la protection de l'origine est particulièrement élégante : elle ne nécessite aucune configuration Nginx, aucune validation d'en-tête complexe et fonctionne immédiatement. Elle offre une expérience fluide aux utilisateurs qui accèdent accidentellement à l'origine, tandis que Bunny CDN continue d'extraire le contenu sans problème.
Ce qui est remarquable dans cette configuration, c'est ce que vous ne le faites pas besoin de configurer:
- Aucune modification du middleware TrustProxies
- Aucune règle nginx complexe
- Aucune complication d'authentification d'en-tête
- Aucun service de stockage supplémentaire
Juste une simple redirection dans index.php et c'est fait !
N'oubliez pas de :
- Commencez par les règles de mise en cache de base et affinez-les en fonction de vos besoins
- Surveillez votre taux de réussite du cache et ajustez-le en conséquence
- Mettre en œuvre la purge du cache pour les mises à jour de contenu
- Testez minutieusement, en particulier les fonctionnalités dynamiques
Avec cette configuration minimale, vous obtenez une diffusion de contenu de qualité professionnelle à une fraction du coût, tout en conservant le flux de travail Laravel Forge convivial pour les développeurs que vous connaissez et aimez.
Ressources
- Documentation de Bunny CDN
- Documentation de Laravel Forge
- Documentation de l'API Bunny CDN (pour la purge du cache)
Dernière mise à jour le 3 septembre 2025
