BunnyCDN - konfiguracja Pull Zone, SSL i optymalizacja WordPress
Opublikowano: 10 kwietnia 2026 · Kategoria: Wydajność / CDN
BunnyCDN to europejski CDN (Słowenia) z konkurencyjnymi cenami, prostym panelem i ponad 120 serwerami brzegowymi. W porównaniu do Cloudflare Free, BunnyCDN faktycznie cachuje treść i płacisz tylko za transfer - bez dodatkowych limitów. Ten artykuł pokazuje jak skonfigurować Pull Zone dla dowolnej strony, włączyć SSL, ustawić reguły cache przez Bunny Rules i zintegrować CDN z WordPress przez oficjalny plugin.
Tworzenie Pull Zone - konfiguracja podstawowa
Pull Zone to konfiguracja CDN wskazująca na twój serwer źródłowy (origin). BunnyCDN będzie pobierał z originu i cachował na swoich serwerach brzegowych.
- Zaloguj się na panel.bunny.net i przejdź do CDN → Pull Zones → Add Pull Zone.
-
Wpisz nazwę (np.
mysite-cdn) i Origin URL (adres twojego serwera, np.https://mysite.example.com). - Wybierz regiony - Europa zawsze aktywna, pozostałe opcjonalnie (wyższy koszt/GB).
-
Po stworzeniu dostaniesz URL CDN w formacie
mysite-cdn.b-cdn.net- możesz go użyć bezpośrednio lub dodać własną domenę (Custom Hostname).
Custom Hostname i SSL
Zamiast *.b-cdn.net możesz używać własnej subdomeny jak
cdn.example.com. BunnyCDN oferuje darmowy SSL przez Let's Encrypt lub możesz
wgrać własny certyfikat.
# 1. W panelu BunnyCDN: Pull Zone → Hostnames → Add Hostname # Wpisz: cdn.example.com # 2. W DNS swojej domeny dodaj rekord CNAME: # cdn.example.com → mysite-cdn.b-cdn.net # 3. W BunnyCDN: Enable Free Certificate (Let's Encrypt) lub Upload Custom # Let's Encrypt: automatyczne odnawianie co 60 dni # 4. Wymusz HTTPS w ustawieniach Pull Zone: # Security → Force SSL: ON # 5. Sprawdz SSL curl -I https://cdn.example.com/wp-content/uploads/logo.png # Oczekiwany header: cdn-cache: HIT (przy pierwszym zapytaniu zwykle MISS)
Bunny Rules - zaawansowane reguły cache
Bunny Rules to system reguł warunkowych - podobny do Cloudflare Rules. Pozwala ustawić własne TTL, wymuszać/blokować cache, przekierowywać, modyfikować nagłówki i optymalizować obrazy. Konfiguracja w panelu: Edge Rules.
- Długi TTL dla statycznych zasobów - pliki CSS/JS/images z hash w nazwie (fingerprinting)
mogą mieć TTL=1rok. Reguła: URL path matches
*.jslub*.css→ Cache TTL = 31536000s. - Pomijaj cache dla API - Reguła: URL path starts with
/api/→ Bypass Cache. - Blokuj hotlinking - Reguła: Request Header Referer does not match
example.comAND URL path ends with.jpg→ Block Request. - Przekierowanie www → bez-www - Reguła: Hostname matches
www.example.com→ Redirect tohttps://example.com/${PathAndQuery}.
# Bunny Rules przez API (REST) - przyklad zmiany TTL
curl -X POST "https://api.bunny.net/pullzone/TWOJ_ZONE_ID/edgerules/addOrUpdate" \
-H "AccessKey: TWOJ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"Enabled": true,
"Description": "Long TTL for images",
"Triggers": [
{
"Type": 0,
"PatternMatchingType": 0,
"PatternMatches": ["*.jpg", "*.png", "*.webp", "*.gif"]
}
],
"Actions": [
{
"Type": 9,
"Parameter1": "31536000"
}
]
}' Integracja z WordPress - plugin Bunny.net
Oficjalny plugin Bunny.net (dawniej CDN Enabler) automatycznie przepisuje URL statycznych zasobów na adresy Pull Zone. Instalacja przez panel WP-Admin:
# WP-Admin → Plugins → Add New → szukaj "Bunny.net" # Zainstaluj i aktywuj plugin "Bunny.net" (cdn.bunny.net) # Konfiguracja: Settings → Bunny.net CDN # Pull Zone Hostname: cdn.example.com (lub mysite-cdn.b-cdn.net) # Rewrite URLs for: # - wp-content/uploads ✓ (media biblioteki WP - bezwzględnie) # - wp-content/themes ✓ (CSS/JS motywu) # - wp-content/plugins ✓ (zasoby pluginow) # Excluded file types: php (nie przepisuj skryptow PHP) # Weryfikacja: sprawdz źródło strony curl -s https://example.com | grep -o 'cdn.example.com[^"]*' | head -5 # Oczekiwany wynik: URL obrazow przepisane na cdn.example.com/...
# Alternatywnie: manualna konfiguracja przez wp-config.php (bez pluginu)
# Dodaj do wp-config.php:
define('WP_CONTENT_URL', 'https://cdn.example.com/wp-content');
# LUB: przepisanie przez .htaccess (Apache)
# RewriteEngine On
# RewriteCond %{HTTP_REFERER} !^https://cdn.example.com [NC]
# RewriteRule ^wp-content/uploads/(.*) https://cdn.example.com/wp-content/uploads/$1 [R=301,L] BunnyCDN z LiteSpeed Cache lub WP Rocket
Jeśli strona ma już wtyczkę cache, zwykle nie potrzebujesz osobnego pluginu Bunny.net do samego przepisywania adresów. Obie popularne wtyczki mają pole na adres CDN i same podmieniają URL zasobów statycznych:
- LiteSpeed Cache - zakładka CDN, opcja CDN Mapping: wpisujesz
adres Pull Zone (np.
https://cdn.twojadomena.pl/) i zaznaczasz, które typy plików (obrazy, CSS, JS) mają iść przez CDN. Cache HTML nadal obsługuje serwer LiteSpeed. - WP Rocket - zakładka CDN: włączasz CDN i w polu CNAME podajesz hostname Pull Zone. Szczegóły ustawień wtyczki opisujemy w poradniku WP Rocket - konfiguracja cache.
Zasada praktyczna: adresy na CDN przepisuje tylko jedno narzędzie, nie plugin Bunny.net i WP Rocket jednocześnie.
Ustawienia cache w Pull Zone: Cache Expiration Time i Browser Cache
Zanim zaczniesz pisać Edge Rules, sprawdź dwa podstawowe ustawienia w zakładce Caching Pull Zone.
- Cache Expiration Time - jak długo plik leży w cache serwera brzegowego. Domyślnie
BunnyCDN respektuje nagłówki
Cache-Controlwysyłane przez origin. Możesz je nadpisać stałą wartością, co przydaje się, gdy hosting wysyła krótkie albo zerowe czasy cache dla plików statycznych. - Browser Cache Expiration Time - jak długo przeglądarka użytkownika trzyma plik u siebie. To osobna wartość niż czas cache w CDN.
- Query string i cookies - w tej samej zakładce decydujesz, czy parametry w adresie
(np.
?ver=6.5) tworzą osobne wersje pliku w cache oraz czy CDN ma usuwać ciasteczka z odpowiedzi originu. Te dwie opcje najczęściej odpowiadają za niski współczynnik HIT.
Dla WordPressa bezpieczny punkt startowy to długi czas cache w CDN dla obrazów, CSS i JS oraz brak cache dla HTML, dopóki nie wiesz, jak strona zachowuje się dla zalogowanych użytkowników i koszyka WooCommerce. Szerszy kontekst warstw cache (strona, obiekt, CDN, przeglądarka) znajdziesz w artykule WordPress - optymalizacja cache.
Purge cache BunnyCDN - z panelu i przez API
Po podmianie pliku pod tym samym adresem (np. nowe logo jako logo.png) CDN
dalej serwuje starą wersję, dopóki nie minie czas cache albo nie wyczyścisz go ręcznie. W
panelu robisz to w Pull Zone → Purge Cache: całą strefę jednym kliknięciem
albo wybrane adresy URL. Przy wdrożeniach automatycznych (CI/CD, skrypt deploy) wygodniej
użyć API:
# Wyczyść całą Pull Zone (ID strefy widać w panelu i w URL panelu) curl -X POST "https://api.bunny.net/pullzone/TWOJ_ZONE_ID/purgeCache" \ -H "AccessKey: TWOJ_API_KEY" # Wyczyść pojedynczy plik curl -X POST "https://api.bunny.net/purge?url=https://cdn.example.com/images/logo.png" \ -H "AccessKey: TWOJ_API_KEY"
Klucz API konta (AccessKey) daje pełny dostęp do wszystkich stref, więc trzymaj go w zmiennych środowiskowych lub sekretach CI, a nie w repozytorium.
Jak sprawdzić, czy BunnyCDN działa (cdn-cache HIT / MISS)
Najszybszy test to podejrzenie nagłówków odpowiedzi. Wykonaj zapytanie dwa razy pod rząd:
# Pobierz same naglowki pliku z CDN curl -I https://cdn.example.com/wp-content/uploads/logo.png # Najwazniejsze naglowki w odpowiedzi: # server: BunnyCDN-... -> zapytanie obsluzyl serwer brzegowy BunnyCDN (kod PoP) # cdn-cache: MISS -> pierwszy raz: plik pobrany z originu # cdn-cache: HIT -> kolejny raz: plik z cache PoP # cache-control: ... -> czas cache dla przegladarki
Jeśli drugie i trzecie zapytanie nadal zwraca MISS, przyczyną jest zwykle
nagłówek Cache-Control: no-cache lub private z originu, ciasteczko ustawiane
w odpowiedzi albo zmieniający się parametr w adresie.
Perma-Cache i Storage Zone
Perma-Cache to zaawansowana funkcja BunnyCDN - zapisuje cache na trwałe na dysku serwera brzegowego. Jeśli origin jest niedostępny, CDN serwuje stale dane. Wymaga powiązanej Storage Zone.
Storage Zone to wbudowany hosting plików BunnyCDN - alternatywa dla S3 z natywnym CDN delivery. Koszt: $0.02/GB/msc + CDN transfer. Możesz uploadować przez FTP, SFTP lub API REST.
# Upload pliku do Storage Zone przez API curl -X PUT "https://storage.bunnycdn.com/TWOJA_ZONE/images/logo.png" \ -H "AccessKey: TWOJ_STORAGE_KEY" \ -H "Content-Type: image/png" \ --data-binary @logo.png # Plik dostepny przez CDN natychmiast: # https://cdn.example.com/images/logo.png # Listuj pliki curl "https://storage.bunnycdn.com/TWOJA_ZONE/" \ -H "AccessKey: TWOJ_STORAGE_KEY"
Kiedy co wybrać? Perma-Cache ma sens przy dużych bibliotekach mediów i originie, który bywa przeciążony lub niedostępny. Storage Zone wybierasz, gdy pliki w ogóle nie muszą leżeć na hostingu (np. pliki do pobrania, wideo, archiwa) i chcesz zwolnić miejsce oraz transfer na serwerze. Jeśli zależy ci głównie na ograniczeniu zapytań trafiających do originu z wielu PoP, zobacz też Origin Shield w CDN.
Bunny Optimizer - optymalizacja obrazów i plików w locie
Bunny Optimizer to dodatkowa, płatna usługa włączana per Pull Zone. Kompresuje i konwertuje obrazy (m.in. do WebP), pozwala zmieniać ich rozmiar parametrami w adresie URL i minifikuje CSS oraz JS.
Jeśli już generujesz WebP wtyczką WordPress lub w LiteSpeed Cache, nie włączaj obu mechanizmów naraz.
BunnyCDN vs Cloudflare - porównanie szczegółowe
| Cecha | BunnyCDN | Cloudflare Free | Cloudflare Pro |
|---|---|---|---|
| Cena transfer (EU) | $0.005-0.01/GB | Darmowy (bez limitu) | Darmowy (bez limitu) |
| Cena miesięczna | Pay per use (~$1-5 małe strony) | $0 | $25/msc |
| Cache HTML stron | Tak (domyślnie off, włącz) | Nie (tylko statyczne) | Tak (Page Rules/Cache Rules) |
| WAF / DDoS | Podstawowy (Edge Rules) | Dobry (reguły OWASP) | Bardzo dobry (managed rules) |
| Liczba PoP (EU) | 40+ PoP w Europie | 300+ PoP globalnie | 300+ PoP globalnie |
| Storage CDN | Tak (Storage Zone $0.02/GB/msc) | Nie | R2 (darmowy egress) |
| Optymalizacja obrazów | Tak (Optimizer - WebP, resize) | Nie (Polish: Pro+) | Tak (Polish + WebP) |
| Najlepszy dla | Media CDN, WordPress assets, Storage | DNS, ochrona, podstawowy cache | Pełne rozwiązanie CDN+WAF |
Bunny CDN czy Cloudflare - kiedy który, a kiedy oba
- Wybierz BunnyCDN, gdy głównym celem jest szybkie dostarczanie mediów i plików statycznych, potrzebujesz przewidywalnego rozliczenia za transfer, przechowywania plików (Storage Zone) albo nie chcesz przenosić DNS domeny do zewnętrznego dostawcy.
- Wybierz Cloudflare, gdy liczy się ochrona: WAF, łagodzenie ataków DDoS, zarządzanie botami i darmowy plan na start. Cloudflare działa jako reverse proxy dla całej domeny, więc wymaga zmiany serwerów DNS. Więcej w artykule CDN w hostingu - Cloudflare.
- Połącz oba, gdy chcesz ochrony Cloudflare dla domeny głównej i BunnyCDN
dla mediów na subdomenie. Wtedy rekord CNAME
cdn.twojadomena.plw Cloudflare ustaw jako DNS only (szara chmurka).
Typowe problemy z BunnyCDN i jak je naprawić
Mixed content po włączeniu CDN
Przeglądarka blokuje zasoby ładowane przez http:// na stronie HTTPS. Upewnij się,
że w pluginie lub wtyczce cache adres CDN zaczyna się od https://, certyfikat
dla własnej subdomeny jest aktywny, a w Pull Zone włączone jest wymuszanie SSL. Zasady
poprawnej konfiguracji certyfikatów opisujemy w poradniku
jak skonfigurować SSL na hostingu.
Fonty i ikony nie ładują się (błąd CORS)
Pliki fontów (.woff2, .woff, .ttf) pobierane z innej
domeny wymagają nagłówka Access-Control-Allow-Origin. W ustawieniach Pull Zone
(sekcja nagłówków) włącz dodawanie nagłówków CORS dla rozszerzeń fontów albo dodaj ten
nagłówek regułą Edge Rules. Po zmianie zrób purge, bo w cache mogą leżeć odpowiedzi bez
nagłówka.
Podwójny cache: wtyczka WordPress i CDN
Po aktualizacji motywu CDN może nadal serwować stary CSS. Ustaw czyszczenie cache CDN razem z cache wtyczki (plugin Bunny.net lub integracja w wtyczce cache) albo korzystaj z plików z wersją w adresie, które zmieniają URL przy każdej aktualizacji.
Cookies i query string omijają cache
Parametry typu ?utm_source= czy ?fbclid= potrafią tworzyć tysiące unikalnych
adresów, z których każdy jest najpierw MISS. Podobnie odpowiedzi ustawiające ciasteczka mogą nie
trafiać do cache. Dla plików statycznych wyłącz uwzględnianie query string w kluczu cache (jeśli
nie używasz parametrów do wersjonowania) i usuwaj ciasteczka z odpowiedzi. Dla HTML zachowaj ostrożność:
tam ciasteczka często oznaczają sesję lub koszyk, których nie wolno cachować wspólnie dla wszystkich.