BunnyCDN Review With Setup Instructions (And Why I Use Both Cloudflare And Bunny)

Bunnycdn review settings

BunnyCDN is my favorite CDN which I use on top of Cloudflare.

Its performance/reliability have always beens solid on cdnperf.com. They have 90+ PoPs, you only pay for the regions you use, and it’s also very simple to set up using the BunnyCDN plugin.

There are also quite a few tweaks you can make in your BunnyCDN settings to improve performance and security. This is more than a BunnyCDN review – I’ll also walk you through the settings! I’ll cover things like geo-replication (perma-cache), Bunny Optimizer, SafeHop, and how BunnyCDN can be used on top of Cloudflare. Feel free to leave me a comment if you have questions. Otherwise, BunnyCDN has quite a bit of documentation and a great support team.

Bunnycdn coupon
Add the coupon OMM5 in your billing section to get $5 in credits


1. Why I Use Both BunnyCDN + Cloudflare

I’ve been using multiple CDNs for a long time.

Even though many people say not to, I’ve always gotten great results when using another CDN on top of Cloudflare. You can control which files (static vs. dynamic) are served from each CDN and each one has a completely different set of optimizations they can bring to the table. In a Facebook post, Gijo confirmed he also suggests Cloudflare and BunnyCDN for several reasons:

Cloudflare with bunnycdn


2. Create A Pull Zone In Specific Regions

I’ll show you how to set up BunnyCDN and you can learn about features, pricing, and other things along the way. Once you’re signed up, the first step is to create a pull zone.

Create a pull zone under pull zones → add pull zone. Follow the same formatting shown in the screenshot below. Name: onlinemediamasters, origin URL: https://onlinemediamasters.com/

You’ll also select the pricing which is based on regions. Since I don’t have many visitors from South Africa and it was the most expensive region ($0.06 /GB), I disabled it. Just take into account where your visitors are from and how expensive the bandwidth is. You can check your hosting account or Cloudflare to see how much bandwidth your site is using, then use it to get an estimated monthly cost based on your current bandwidth (smaller, optimized sites cost less).

When you’re done, click “Add Pull Zone.”

Bunnycdn add pull zone

Google analytics countries
If you’re not sure where visitors are from, check Google Analytics → Audience → Geo → Location


3. Add Pull Zone Name To BunnyCDN’s Plugin

When you’re done with the first step, you will see this page:

Bunnycdn wordpress setup instructions
BunnyCDN provides instructions to setup the BunnyCDN plugin and your cache plugin

Install the BunnyCDN plugin and add your pull zone name. When you click advanced settings, you can add your API key (found in your account settings) which lets your purge cache directly in the BunnyCDN plugin. Otherwise, you usually shouldn’t need to configure anything else here.

Bunnycdn plugin settings


4. Add CDN URL To Your Cache Plugin

In addition to setting up the BunnyCDN plugin, you should also add your CDN URL into your cache plugin’s CDN settings. This can help serve even more assets from the CDN. BunnyCDN’s support recommended this when I noticed several assets weren’t being served, and this fixed it.

Flyingpress bunnycdn url


5. Make Sure Assets Are Served From BunnyCDN

View your source code and make sure files are being served from BunnyCDN (i.e. images, CSS, JavaScript, fonts). You may need to clear cache, purge the pull zone, or just wait until it updates.

Bunnycdn source code


6. Use A Custom CDN URL

Instead of mywebsite.com.b-cdn.net, you can make your hostname cdn.mywebsite.com.

Bunnycdn custom hostname
Step 1: Add a custom hostname to BunnyCDN (i.e. cdn.mywebsite.com)
Add bunnycdn hostname to cloudflare
Step 2: Add a CNAME record to your DNS provider with “DNS only” option (see Cloudflare instructions)
Flyingcdn assets
Step 3: Purge cache and view source code to make sure files are served from the new hostname


7. Force SSL

In the next few steps, I’ll will walk you through the BunnyCDN settings:

Bunnycdn settings

You can start by forcing SSL in the General settings. This makes sure visitors are on a secure connection by redirecting HTTP traffic and prevents duplicate content according to BunnyCDN.

Bunnycdn force ssl


8. SafeHop

If BunnyCDN fails to connect to the origin, you can have it retry which improves reliability.

  • Enable SafeHop – set this to ON so a retry will be made.
  • Origin Retries – I set this to 1 so only 1 retry will be made
  • Retry Delay – I set it to no delay so it will be made immediately.
  • Origin Retry Reasons – default connection/response timeout is fine.
  • Origin Connect + Response Timeout – I set these both to the maximum amount of time (10s origin connect timeout, 60s origin response timeout) until they’re considered failed.

Bunnycdn safehop settings


9. Caching Settings

  • Browser Cache Expiration Time – you can either set this to match server cache expiration or override and set to 1 year, since Google suggests 1 year for static assets.
  • Query String Sort: ON – two URLs with different query strings will be saved/returned as a single file since they most often have the same result (this prevents duplicating caching).
  • Cache Error Responses – prevents DDoS attacks with temporary caching. BunnyCDN says “when enabled, any response with the status code higher than 304 will no longer get cached at all, making sure your content only gets cached when it was supposed to be.”
  • Vary Cache – enable browser WebP support. Gijo Varghese from WP Speed Matters says it “tells BunnyCDN to deliver separate files for browsers with or without WebP support.” BunnyCDN also has examples of how the other options can be used, like using a single pull zone for multiple sites or serving different files based on the user’s country/mobile device.
  • Strip Response Cookies: ON – strips cookies received from the origin server so clients won’t receive the Set-Cookie response header (disabling this can lead to security risks).
  • Optimize For Video Delivery: OFF – only needed if you host videos on your website which can speed up the delivery by breaking videos into chunks so it can build a faster response.
  • Stale Cache – I enabled both while origin is offline as well as while updating. While the cache is updating or if the origin is offline, BunnyCDN will temporarily serve a stale cache.
  • Follow Redirects: ON – when enabled, it caches 301/302 redirects returned by your origin.

Bunnycdn caching settings


10. Perma-Cache

Perma-cache is also known as geo-replication. When turned on, BunnyCDN automatically copies your files to their storage zones. Files will then be pulled from the closest zone and all future requests to files won’t hit the origin. This improves cache/hit ratio and reduces latency.

Once you enable perma-cache, go to Storage → Add Storage Zone. Give your storage zone a name (your business name is fine), select your main storage region, then click “Enable Geo-Replication.” You’ll be prompted to select the regions where you want your files to be replicated.

The price is $0.010/GB for the first 2 regions (including your main storage region) then $0.005/GB for each additional region. You can just select regions where you have lots of visitors.

When you’re done, click “Add Storage Zone.”

Bunnycdn perma cache

And if you click your storage name (ommstorage), you’ll get a new set of menus where you can use the file manager to upload/access files from your edge storage zone, error handling settings, and the replication tab where you can add more storage zones in case you ever want to expand.

Bunnycdn geo replication

For FlyingPress users, FlyingCDN has BunnyCDN’s geo-replication built in for free.


11. Security Settings


These are used to block specific requests, referrers, and IPs from accessing the pull zone. For example, websites hotlinking my images has always been a big problem for me. I set up hotlink protection by adding my site to allowed referrers so only my site has access to the pull zone.

Bunnycdn hotlink protection


I have logging enabled for 3 days and anonymize log IPs for better GDPR compliance (you’ll sign the DPS agreement). I didn’t enable log forwarding or permanent storage of logged files.


Verify origin SSL should usually be turned ON to connect your origin via encrypted HTTPS connection while verifying the certificate on your server (a small tweak to improve security).

502/504 Error Pages

In case users see a 502/504 page, I turned whitelabel error pages ON to remove BunnyCDN’s branding. I haven’t taken the time to create a custom error page, but you would ideally do this.

S3 Authentication

Have BunnyCDN sign requests to the origin URL by adding your AWS information in the fields.

Token Authentication

BunnyCDN has instructions to control who, where and for how long content can be accessed.


12. Traffic Manager

The traffic manager lets you allow, redirect, or block certain countries. You can click certain countries on the built-in map and they will turn white (allow), yellow (redirect), or red (block).

Bunnycdn traffic manager


13. Header Settings

  • Add CORS Headers: ON – enables CORS headers (cross-origin resource sharing) which is needed when files on your website are being loaded from a third-party domain like a CDN.
  • Add Canonical Headers: ON – self-explanatory, canonical headers are good SEO practice.
  • Forward Host Headers: OFF – BunnyCDN recommends leaving off (I don’t ask questions).

Bunnycdn headers settings


14. Bunny Optimizer

Bunny Optimizer optimizes images and also minifies CSS/JS.

I stopped using image optimization plugins completely and started using CDNs. Bunny Optimizer is $9.50/mo with unlimited image optimizations so you don’t have to worry about hitting small quotas. If it’s too expensive, you can use FlyingPress which has Bunny Optimizer built-in for free. If you’re using Bunny Optimizer, all the settings should pretty much all be ON.

  • WebP Image Compression – serves WebP images without changing image URLs.
  • Dynamic Image Processing – aside from adjusting the width, height, and image quality, this lets you adjust things like sharpen, crop, brightness, and saturation. See how it works.
  • Minify CSS Files – minifying CSS from a CDN can often be faster than cache plugins.
  • Minify JavaScript Files – minifying JS from a CDN can often be faster than cache plugins.
  • Smart Image Optimization – resizes images and adjusts quality for desktop + mobile.
  • Watermark Images – add a custom watermark (logo) when BunnyCDN serves images.
  • Image Classes – add image classes for dynamic image processing (such as thumbnails).
  • Force Transformation Classes – only requests with image classes are used for dynamic processing. They say this prevents token authentication, temporary links, leaked images.
  • Statistics – see how much traffic you saved and average compression ratio of your images.

Bunnycdn optimizer settings


15. Edge Rules

When you click “add edge rule” you can see the available rules and conditions (triggers). BunnyCDN includes a certain amount of free rules then it costs $1/rule. One common rule is to redirect your b-cdn.net hostname to a custom hostname (cdn.mywebsite.com) but there may be other situations where you will block requests, bypass cache over cookies, override cache times, ignore vary cache for query strings (i.e. utm, fbclid), or change token authentication. BunnyCDN also shared some advice to be careful with HTTP/HTTPS schema + trailing slashes.

Bunnycdn edge rule


16. Network Limits

Use network limits to control CDN costs, but I have them left as the default.

Bunnycdn network limits


17. BunnyCDN vs. Other CDNs

You can see the performance/reliability of popular CDNs on cdnperf.com.

Cdnperf. Com performance

But it doesn’t include QUIC.cloud or StackPath (at least anymore since StackPath had major issues). It also doesn’t take into each CDN’s features (i.e. Cloudflare Enterprise is much better), so it’s hard to do a direct comparison. I personally use both BunnyCDN and Cloudflare’s DNS and CDN for a better cache hit ratio and also take advantage of BunnyCDN with perma-cache.

BunnyCDN – consistently performance CDN with many speed/security features, 90+ PoPs, affordable region-based pricing, easy to set up using their plugin, but doesn’t cache HTML.

Cloudflare – 250+ data centers and is arguably the best free CDN. Cloudflare enterprise is also arguably better than BunnyCDN which you can get for cheap through hosts like Rocket.net, Cloudways, and Kinsta (although Rocket’s is better and is the only one with full page caching).

QUIC.cloud – their free CDN isn’t great since it only uses 6 PoPs in US + EU and doesn’t include DDoS protection, but their paid (standard) plan is much better which uses all 70 PoPs, caches HTML, and has their own speed/security features. Of course, you need to use a LiteSpeed server.


What Do You Think?

Have any BunnyCDN tips you think I should add to this post? Did it help you? Let me know your thoughts in the comments – I try to respond to all them, but sometimes it takes me a few days :)


You Might Also Like:


  1. Hi, If I already have a WordPress cache plugin likes FlyingPress and have filled in the Bunny CDN address, do I still need to repeatedly enable the Bunny CDN WordPress plugin?

  2. Hi Tom,
    Thanks for sharing your expertise and experience with these vendors and services. I’m on Cloudways and have opted for their Cloudflare Enterprise CDN feature. Am I good just using Cloudways + Cloudflare Enterprise CDN + Breeze? Would you still use Bunny CDN instead of the CF Enterprise CDN? Should I look into an alternative to Breeze?

    I have a dozen small sites and I’m on the $50@month Cloudways Digital Ocean, and pay $36 a month for the CF Enterprise upgrades. I’m in the neighborhood of what it would cost to host 10 sites on Rocket.net… do you feel I’d see a significant speed increase at Rocket to go to the effort to migrate?

    Thanks in advance, I really appreciate your input.

    • Hey John,

      Yes, look into a Breeze alternative. I prefer FlyingPress but WP Rocket is (ok) too. Breeze lacks a lot of features you should see better results with either of those two (see here). Cloudflare Enterprise is Cloudways is fine, nothing needed there.

      Regarding Cloudways/Rocket.net, Cloudways will be increasing prices soon, so there’s that. And yes, I think you’ll see a nice speed boost mainly because their Cloudflare Enterprise includes APO and they include a lot more cores/RAM with LiteSpeed’s PHP. It’s the same move I did only it was from Vultr HF on Cloudways. I don’t believe Cloudways offers malware protections outside of WAF on Cloudflare Enterprise, while Rocket.net does with Imunify360.

      Not sure what your storage/bandwidth looks like, but that’s the main reason Rocket.net starts costing more. Just chatted with Chad from Rocket.net today and he said the Business plan (and higher) comes with Redis Object Cache Pro, so since you would need the Business plan for 10 sites, you would still be able to use that. But yeah, take a look at the storage/bandwidth you’re currently using and see which Rocket.net plan you would need. If it’s in the budget, I think it’s worth it.

      They also do unlimited free migrations so IF you’re actually considering it, hopefully it shouldn’t be as much work as you think.

  3. Hi Tom, this is a great post, as always.
    I currently use FlyingCDN + Cloudflare. When you say that you “take advantage of BunnyCDN with perma-cache,” do you mean FlyingCDN (which already includes BunnyCDN’s perma-cache)? Or do you have both FlyingCDN and BunnyCDN perma-cache?
    And if you use both, what do you put in the CDN URL box in the FlyinPress plugin? FlyingPress’ CDN URL or BunnyCDN’s CDN URL? I’m a bit confused here…
    Your site is really fast, and I’d love to get mine to that speed.
    Thanks for your time!

    • Hey Vasco,

      I recently made some changes like moving from Cloudways to Rocket.net then also started using GeneratePress.

      Now that I’m using Rocket.net with Cloudflare Enterprise, I haven’t integrated FlyingCDN but will be trying them both soon. Previously, I was using Cloudflare + FlyingCDN. Since FlyingCDN integrates BunnyCDN for you, you don’t need to do anything with BunnyCDN or pay for it. You would login to your FlyingCDN account and configure everything there. They have Bunny Optimizer and geo-replication (perma-cache) built-in so you would just use add your FlyingCDN URL to FlyingPress (or whatever cache plugin you’re using) to rewrite asset URLs.


Leave a Comment