Checklists / Cloudflare

The Cloudflare setup, security, and performance checklist.

34 checks across dns and domain, ssl/tls, origin protection, caching, waf and bots, workers and r2, account and resilience. Tick items off as you go. Your progress is saved in this browser.

0 of 34 complete

1. DNS and domain

DS record published at the parent zone (empty output means DNSSEC isn't active)

dig +short DS example.com

2. SSL/TLS

3. Origin protection

Request the origin directly, skipping Cloudflare (replace the IP and hostname)

curl -skI --resolve example.com:443:203.0.113.10 https://example.com

4. Caching

Check whether an asset is served from cache

curl -sI https://example.com/assets/app.js | grep -iE 'cf-cache-status|cache-control|^age'

5. WAF and bots

6. Workers and R2

7. Account and resilience

Want this done for you?

I run a fixed-price Cloudflare audit: caching, WAF rules, DNS, SSL/TLS, and Workers and R2 costs. You get a written report with a prioritized fix list and expected impact, delivered in one week. Ongoing management is available after the audit.

Frequently asked questions

Which SSL/TLS mode should I use with Cloudflare?

Full (strict), with a valid certificate on your origin. Flexible sends traffic to the origin over plain HTTP, and Full encrypts it but doesn't validate the certificate. A Cloudflare Origin CA certificate works for Full (strict) while traffic is proxied.

How do I stop people bypassing Cloudflare by hitting my origin IP?

Allow only Cloudflare's published IP ranges at your firewall, or use Cloudflare Tunnel so the origin has no public inbound port. Authenticated Origin Pulls adds a certificate check, and zone-level AOP is stricter than global. Then test by requesting the origin IP directly. It should fail.

Why isn't Cloudflare caching my HTML pages?

By default Cloudflare caches by file extension. Static assets like images, CSS, and JavaScript are cached, but HTML and JSON are not. Add a Cache Rule that makes the URL eligible for cache, and exclude requests with cookies so personalized pages aren't cached.

What's the difference between cf-cache-status DYNAMIC and BYPASS?

DYNAMIC means Cloudflare decided at request time that the URL wasn't eligible for cache, so it went to the origin. BYPASS means the URL was eligible, but the origin response wasn't cacheable, for example because of Cache-Control: private or a Set-Cookie header.

Can I serve production files from an r2.dev URL?

No. Cloudflare says r2.dev public access is not intended for production and is rate limited. Connect a custom domain to the bucket, which also gives you caching, WAF rules, and bot controls.

Related