Hey Matjaz,
When Cloudflare shows cf-cache-status: DYNAMIC, it means Cloudflare has determined the content shouldn’t be cached — typically because of cookies, request headers, or how your origin server sets Cache-Control headers. This is Cloudflare’s default behaviour for HTML pages and won’t change unless you explicitly configure caching rules.
Let me break down what’s happening:
Cloudflare vs. Nginx/cache plugin
- Cloudflare sits in front of your Nginx server, so all requests go through Cloudflare first
- Even if you haven’t set specific caching rules, Cloudflare’s default is to treat HTML as dynamic (bypassing its edge cache)
- Nginx and your cache plugin operate behind Cloudflare, so they can still cache content — but Cloudflare’s headers and behavior may override what the browser sees
To get CF-Cache-Status: HIT
You need to create a Page Rule or use Cache Rules (newer interface) in your Cloudflare dashboard:
- Go to Rules > Page Rules (or Rules > Cache Rules)
- Add a rule for your URL pattern (e.g.,
yourdomain.com/*)
- Set Cache Level to Cache Everything
- Optionally set Edge Cache TTL to something appropriate
This tells Cloudflare to cache the response at the edge, and if successful, cf-cache-status will change from DYNAMIC to HIT.
But there’s a catch — if your WordPress site sets Cache-Control: no-cache or sends cookies with the request, Cloudflare may still bypass the cache. You may need to use a Cache Bypass Cookie rule to strip out unnecessary cookies from cached requests.
Regarding your specific question about Cloudflare overriding Nginx/cache plugins:
Cloudflare respects the Cache-Control headers your Nginx/cache plugin sends. If your cache plugin sets Cache-Control: s-maxage=3600 or similar, Cloudflare should honour that — but only if the content is eligible for caching in the first place (which is where the Page/Cache Rule comes in).
If you truly want to exclude Cloudflare entirely from handling caching, you can:
- Set Cache Level to Standard (which only caches static assets like images, CSS, JS)
- Or put your site on Development Mode temporarily to test
- Or remove Cloudflare entirely if you don’t need its CDN/DDoS protection
The browser caching rules you mentioned that give “bad points” — are you referring to GTmetrix or a similar audit? Cloudflare’s default browser cache TTL is typically 4 hours for static assets, which is usually fine. You can adjust that under Speed > Optimization > Browser Cache TTL.
Bottom line: If you want Cloudflare to cache your pages, create a Cache Everything page/cache rule. If you don’t want Cloudflare involved at all, remove the domain from Cloudflare and point DNS directly to your Nginx server.
Hope that clears things up!