Data Nexus

Infrastructure · We run it ourselves

Cloudflare

A global proxy network that terminates traffic close to the visitor, plus Workers — a runtime that executes code at those same locations rather than at an origin.

Cloudflare is two products that get discussed as one: a runtime where code lives at the edge with no server to keep alive, and a proxy sitting in front of somebody else's origin deciding what reaches it. The first is a place to build and the decisions in it are irreversible in ways the documentation states plainly. The second is where a well-meant default quietly changes what a site is to the outside world, and this entry is as much about the second as the first.

cloudflare.com

01/Why this one

  1. 01

    Workers removes the question of what stays running. A multiplayer room for a browser game has no steady traffic and no schedule — it is empty for days and then four people join at once — and the alternative is a process billed by the hour to wait. The code is deployed with wrangler and the room exists when somebody opens it.


  2. 02

    Durable Objects are the reason to use the platform rather than a convenience on top of it. A room needs one authority that holds the current state and serialises what happens to it; a stateless function cannot be that, and a shared database used as a mutex is a worse version of the same thing. One object per room, addressed by name, single-threaded, with storage attached — that is the shape of the problem rather than an accommodation to the platform.


  3. 03

    The compatibility date is pinned rather than set to today. It is a behaviour switch for the runtime, so moving it changes what the deployed code does and belongs in a commit that says so — the opposite of the usual treatment, where it is scaffolding nobody reads again.


  4. 04

    The storage backend of a Durable Object class is chosen once. A class declared in a migration cannot be moved between backends after it ships, so the first deploy carries a decision that no later migration undoes. That belongs in review before the first deploy, not in a retrospective.


  5. 05

    As a proxy in front of an origin, Cloudflare and the origin each hold an opinion about TLS and about redirects, and when the two disagree the failure is a loop rather than an error. Our own apex answered a 308 to itself and did not open at all: the encryption mode was Flexible, so Cloudflare fetched the origin over plain HTTP, the origin replied that the request should be upgraded to HTTPS, and Cloudflare relayed that instruction back to the browser. The setting had stood 153 days. Nothing was down, nothing alerted, and Search Console reported only that it could not fetch the sitemap.


  6. 06

    The vendor's own crawler instrument sees only what the proxy sees. AI Crawl Control watches the zone, on our zone that is the apex alone, and the apex answers every request with a redirect to the canonical host — 224 of 226 requests in a day were 3xx. The dashboard was therefore counting knocks on a door and never what was read, which is why the census on this site is middleware at the origin instead of a screenshot from a vendor panel.


  7. 07

    Edge configuration is infrastructure that lives in a dashboard rather than in a repository. An SSL mode, a redirect rule and a bot setting are all production changes that no git history records and no build gate can fail on. The mitigation is discipline and not tooling — rules given names that state their intent, written down where the rest of the architecture is written down — and it is worth saying that this is weaker than every other layer we run.

02/What you can check

An entry that cannot point at something you can open, run or read does not compile. That is a property of the type, not a promise in a paragraph.

In our code
pakibus/wrangler.jsonc — The room server for a WebGL game: a Durable Object binding, a SQLite-backed class declared in migration v1, a compatibility date pinned to a stated runtime rather than to today, and observability turned on so the logs outlive the terminal.

Run it yourself
curl -sI https://datanexus.ae/ | grep -iE '^(server|location|cf-ray)'; curl -sI https://www.datanexus.ae/ | grep -iE '^(server|cf-ray)' → The apex returns server: cloudflare with a cf-ray and a 301 to https://www.datanexus.ae/. The canonical host returns server: Vercel and no cf-ray at all — one hostname proxied, the other not, which is the split this entry argues about.

Case record
One of the oldest electronics retailers in the region, rebuilt after a complete data and platform failure: a Shopify origin behind Cloudflare, served from a Dubai edge, with pricing, analytics and conversion restored.Read the record

Run it yourself
curl -sI https://bhmstore.com/ | grep -iE '^(server|nel)' → server: cloudflare in front of a Shopify origin, with Cloudflare's own NEL reporting group in the headers — the edge is answering, not the storefront.

On this site
The origin-side count of every automated client that fetched this site, built because the edge-side instrument watches a hostname that only ever answers with a redirect.Open it

Property of the thing
Bot protection at the edge decides by signature and reputation rather than by declared intent, so a rule written against scrapers applies equally to a declared assistant fetcher — and a challenged crawler receives the interstitial as the response body rather than an error it can distinguish from content. — Request a page with an assistant crawler's user agent from an address outside your own network and diff the status and body against what a browser receives; on a zone with challenges in force the two differ, and nothing in the crawler's own behaviour reports that it happened.
03/Where it stops

Invariant

The edge configuration that hardens a site against scrapers is the same configuration that removes it from the answer layer. Bot Fight Mode, a managed challenge on a broad path, or a rate limit tuned for human browsing will challenge OAI-SearchBot, Claude-User and PerplexityBot alongside everything else, and none of them complains — they take the challenge page as the page and move on, so the loss appears months later as an absence of citations with nothing in any log that names the cause. On an engagement where visibility to assistants is the thing being bought, that is a genuine conflict between two products of the same vendor rather than a setting waiting to be tuned, and the resolution is to measure at the origin and accept a weaker edge posture than the dashboard recommends.