I have a website that serves quite a few images. I am trying to cache as much as possible as my host charges for bandwidth. I have a page rule to cache everything:
You actually don’t need a cache-everything page rule for images. Cloudflare caches static files by default. A cache-everything rule will also cache your HTML, which is not cached by default.
I see all your images as HIT after the second or third request of the same page.
But please understand that Cloudflare has a cache eviction policy where infrequently visited files get dropped from the cache regardless of the Edge TTL set by your settings. So if you visit a low-visitation page, you might face lots of uncached images (those that are exclusive to that page), that will then be re-cached as the page gets more visitors.
That could help you. Make sure under Cache > Tiered Cache you have Tiered Cache enabled, as Cloudflare keeps cache on more than one of its 300+ datacenters depending on where the visitor came from. You may want to have a look at this script by @eva2000 that allows you to make calls to page test apis from different locations.
I’m not familiar with either Drupal or R2 to make any significant comment, but here’s the R2 blog announcement, see if it fits your goals: