Laravel Forge Bunny CDN

CDN instellen met Laravel Forge: een complete productiehandleiding

In deze handleiding begeleid ik je bij het instellen van Bunny CDN voor je Laravel-applicatie die gehost wordt op Forge (of welke server dan ook), met behoud van Let's Encrypt SSL-certificaten en de juiste beveiligingsmaatregelen. Het beste nieuws? De installatie is verrassend eenvoudig: er zijn slechts een paar DNS-wijzigingen en een PHP-redirect van vijf regels nodig. Geen complexe Nginx-configuraties, geen middleware-wijzigingen, gewoon een eenvoudige implementatie.

Waarom Bunny CDN?

Voordat we ingaan op de technische opzet, bespreken we kort waarom Bunny CDN is een uitstekende keuze voor Laravel-toepassingen:

  • Kosteneffectief: Vanaf slechts $0.01/GB is dit een van de meest betaalbare CDN's
  • Wereldwijde aanwezigheid: Meer dan 100 PoP's wereldwijd zorgen voor snelle levering van content
  • Eenvoudige integratie: Eenvoudige installatie met uitstekende documentatie
  • Prestatie: Ingebouwde beeldoptimalisatie, Brotli-compressie en HTTP/3-ondersteuning
  • Ontwikkelaarsvriendelijk: Krachtige API en edge-regels voor nauwkeurige controle
  • Europees CDN: Voldoet aan de AVG

🤓😎 Steeds meer mensen krijgen onze Geek-, Privacy-, Dev- en Lifestyle-tips

Wil je de laatste Geek-, Privacy-, Dev- en Lifestyle-blogs ontvangen? Abonneer je op onze nieuwsbrief.

De architectuuruitdaging

Bij het opzetten van een CDN staan we voor een interessante uitdaging: hoe verwijzen we ons domein naar het CDN terwijl het CDN content van onze server moet ophalen? Als we simpelweg voorbeeld.com naar Bunny CDN en vertel Bunny dat hij moet trekken van voorbeeld.com, creëren we een oneindige lus.

De oplossing? Maak een apart oorsprongssubdomein aan dat Bunny CDN kunt halen terwijl uw hoofddomein naar het CDN wijst.

Dit is onze doelarchitectuur:

Gebruiker → example.com → Bunny CDN → server.example.com → Laravel/Forge (CNAME) (Pull) (A-record) (Oorsprong)

Stap 1: bereid je Laravel Forge-opstelling voor

Eerst moeten we onze Forge-site configureren om te reageren op een origineel subdomein.

Voeg het Origin-subdomein toe

In Laravel Forge:

  1. Navigeer naar uw site-instellingen
  2. Voeg onder ‘Aliassen’ toe server.voorbeeld.com
  3. Hiermee wordt uw nginx-configuratie bijgewerkt om verzoeken voor dit subdomein te accepteren

Installeer Let's Encrypt SSL

Voor veilige communicatie met Bunny CDN hebben we SSL op onze oorsprong nodig:

  1. Ga naar SSL → Let's Encrypt in Forge
  2. Voeg een certificaat toe voor server.voorbeeld.com
  3. Activeer het certificaat

Het mooie van deze aanpak is dat de vernieuwing van Let's Encrypt perfect blijft werken, omdat het subdomein rechtstreeks naar uw server verwijst.

Stap 2: DNS-records configureren

Maak deze records aan bij uw DNS-provider:

Type Naam Waarde Doel Een server YOUR_SERVER_IP Directe oorsprongstoegang CNAME @ yourzone.b-cdn.net Hoofddomein via CDN CNAME www yourzone.b-cdn.net WWW via CDN (optioneel)

OpmerkingSommige DNS-providers ondersteunen geen CNAME voor rootdomeinen. Als dat bij u het geval is, overweeg dan Cloudflare (met proxy uitgeschakeld) of Bunny's eigen DNS-service. Beide ondersteunen CNAME-flattening.

Stap 3: Bunny CDN instellen

Creëer een pull-zone

  1. Inloggen op Bunny CDN
  2. Maak een nieuwe Pull Zone:
    • Oorspronkelijke URL: https://server.example.com
    • Pull Zone Naam: Kies iets beschrijvends
    • Inschakelen SSL-certificaat

Aangepaste hostnaam configureren

  1. In Pull Zone-instellingen → Hostnamen
  2. Voeg uw domeinen toe:
    • voorbeeld.com
    • www.voorbeeld.com (indien nodig)

SSL inschakelen

  1. Ga naar SSL-certificaatinstellingen
  2. Schakel ‘Gratis SSL-certificaat’ in (of upload uw eigen certificaat)
  3. Wacht op provisioning (meestal 2-5 minuten)
  4. Schakel 'Forceer SSL' in om HTTP om te leiden naar HTTPS

Stap 4: Implementeer oorsprongsbeveiliging

Sinds server.voorbeeld.com nu openbaar toegankelijk is, moeten we ervoor zorgen dat alleen Bunny CDN er toegang toe heeft. Dit is de oplossing die perfect werkt:

De eenvoudige PHP-omleidingsoplossing

Voeg dit toe bovenaan je publiek/index.php:

/* |-------------------------------------------------------------------------- | Directe oorsprongtoegang omleiden |-------------------------------------------------------------------------- | | Leid alle verzoeken naar server.example.com om naar het hoofddomein | terwijl het volledige pad en de queryparameters behouden blijven. | */ if (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] === 'server.example.com') { header("HTTP/1.1 301 permanent verplaatst"); header("Locatie: https://example.com" . $_SERVER['REQUEST_URI']); exit(); }

Deze elegante oplossing:

  • Stuurt directe bezoekers door naar de CDN-URL
  • Behoudt het gevraagde pad en de queryreeksen
  • Werkt zonder configuratie
  • Bunny CDN negeert omleidingen bij het ophalen van inhoud
  • Geen nginx-configuratie nodig
  • Geen complexe headervalidatie vereist

Waarom dit werkt: Bunny CDN volgt geen omleidingen bij het ophalen van content van je bron, dus het haalt de content succesvol op. Iedereen die rechtstreeks toegang heeft tot de bron, wordt doorgestuurd naar de juiste CDN-URL.

Alternatief: Nginx-niveau-omleiding

Als u dit liever op nginx-niveau afhandelt, kunt u dit toevoegen aan uw serverblok in Forge:

nginx (ik heb dit niet getest, alleen de bovenstaande)

server { listen 443 ssl http2; server_name server.example.com; # Directe toegang omleiden naar CDN URL if ($http_user_agent !~* "BunnyCDN") { return 301 https://example.com$request_uri; } # Rest van je Laravel-configuratie... }

Opmerking: Terwijl Bunny CDN aangepaste headers ondersteunt zoals X-Pull-KeyIn de praktijk is de eenvoudige omleidingsmethode betrouwbaarder en vereist minder configuratie.

Stap 5: Laravel configureren voor CDN

Het mooie van deze configuratie is dat Laravel minimale configuratie vereist. In de meeste gevallen hoef je er alleen voor te zorgen dat je omgevingsvariabelen correct zijn:

Omgevingsconfiguratie

Werk uw .env:

omgeving

APP_URL=https://voorbeeld.com ASSET_URL=https://voorbeeld.com

Dat is alles! Laravel werkt naadloos samen met het CDN zonder dat TrustProxies-configuratie nodig is voor de meeste use cases.

Cacheheaders voor statische assets (optioneel)

Voor betere cacheprestaties kunt u cachecontroleheaders toevoegen aan uw openbaar/.htaccess (als nginx andere regels gebruikt):

apache

# Cache-images gedurende 1 jaar Headerset Cache-Control "public, max-age=31536000" # Cache CSS/JS gedurende 1 maand Headerset Cache-Control "public, max-age=2592000"

Het standaardcachegedrag van Bunny CDN is echter voor de meeste toepassingen voldoende.

Stap 6: Optimaliseer Bunny CDN-instellingen

Edge-regels configureren

Maak regels voor dynamische inhoud die niet in de cache mag worden opgeslagen:

  1. Beheerdersgebied: Pad komt overeen /beheerder/* → Cache omzeilen
  2. API-routes: Pad komt overeen /api/* → Cache omzeilen
  3. Autorisatieroutes: Pad komt overeen /login, /register → Cache omzeilen

Prestatiefuncties inschakelen (extra kosten)

  • Bunny Optimizer: Optimaliseert automatisch afbeeldingen, CSS en JavaScript
  • WebP: Serveert WebP-afbeeldingen aan ondersteunde browsers
  • Brotli-compressie: Betere compressie dan gzip
  • HTTP/3: Nieuwste protocol voor verbeterde prestaties

Stap 7: Testen en monitoren

CSRF-fix 419-code

Waarschijnlijk werken CSRF-formulieren nog niet en geven ze een 419-statuscode vanwege deze instelling:

[X] Reactiecookies verwijderen: indien ingeschakeld, verwijdert bunny.net alle Set-Cookie-headers van de hostnaam van de zone. Schakel deze functie in als u een domein zonder cookies nodig hebt.

Schakel dit selectievakje uit:

Controleer uw instellingen

  1. DNS-propagatie: Gebruik dig example.com om CNAME te verifiëren
  2. SSL-certificaat: Rekening https://example.com toont Bunny's certificaat
  3. Oorsprongsbescherming: Probeer toegang te krijgen https://server.example.com direct (moet doorverwijzen)
  4. Cache-headers: Gebruik browser DevTools om cacheheaders te verifiëren
  5. Dynamische inhoud: Test login, formulieren en geauthenticeerde gebieden

Prestaties bewaken

Controleer deze statistieken in het Bunny CDN-dashboard:

  • Cache-hitverhouding: Moet boven 80% liggen voor optimale prestaties
  • Bandbreedte opgeslagen: Toont een vermindering van het oorspronkelijke verkeer
  • Reactietijden: Vergelijk de responstijden van de rand met de oorsprong

Veelvoorkomende valkuilen en oplossingen

Sessies werken niet

  • Probleem: Sessies verloren tussen verzoeken
  • Oplossing: Ervoor zorgen SESSIE_DOMEIN=.example.com in .env

CORS-problemen

  • Probleem: Lettertype- of AJAX-verzoeken geblokkeerd
  • Oplossing: CORS-headers toevoegen in Laravel- of Bunny-edgeregels

POST-verzoeken mislukken

  • Probleem: Formulierinzendingen geven 405-fouten
  • Oplossing: Zorg ervoor dat POST-aanvragen de cache omzeilen in edge-regels

Verouderde inhoud na implementatie

  • Probleem: Oude middelen bediend na inzet
  • Oplossing: Implementeer cache-busting met Laravel Mix-versiebeheer

Conclusie

Het opzetten van Bunny CDN met Laravel Forge is verrassend eenvoudig en biedt een uitstekende balans tussen prestaties, kosten en onderhoudbaarheid. Het origin subdomeinpatroon lost de routinguitdaging elegant op en behoudt tegelijkertijd de eenvoud van Let's Encrypt-certificaten via Forge.

De eenvoudige PHP-redirectoplossing voor bronbeveiliging is bijzonder elegant: er is geen Nginx-configuratie of complexe headervalidatie vereist en het werkt direct. Het biedt een naadloze ervaring voor gebruikers die per ongeluk rechtstreeks toegang hebben tot de bron, terwijl Bunny CDN de content probleemloos blijft ophalen.

Het opmerkelijke aan deze opstelling is wat je niet doen moet configureren:

  • Geen TrustProxies-middleware-wijzigingen
  • Geen complexe nginx-regels
  • Geen complicaties bij header-authenticatie
  • Geen extra opslagdiensten

Gewoon een simpele omleiding in index.php en klaar!

Vergeet niet om:

  • Begin met basisregels voor cachen en verfijn deze op basis van uw behoeften
  • Houd uw cache-hitratio in de gaten en pas deze dienovereenkomstig aan
  • Implementeer cache-opschoning voor inhoudsupdates
  • Test grondig, vooral dynamische functies

Met deze minimale configuratie krijgt u contentlevering op ondernemingsniveau voor een fractie van de kosten, terwijl u toch de ontwikkelaarsvriendelijke Laravel Forge-workflow behoudt die u kent en waardeert.

Bronnen

Laatst bijgewerkt op 3 september 2025

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

nl_NLNederlands
Scroll naar boven