Edge delivery for people who
read their own access logs.

Origin pull, custom TLS, HTTP/3, stale-while-revalidate. Eleven nodes across six European countries. Flat bandwidth pricing — no per-request billing, no surprise egress line.

11edge nodes
6countries
41 msmedian RTT, EU
99.94%90-day uptime

Network

Live status →

Anycast is not used. Pick a node explicitly, or let edge.dnox.eu resolve by GeoDNS. Node hostnames are stable and safe to hardcode.

Londonuk.dnox.euuk1 · since 2026-08
Amsterdamnl1.dnox.eunl1 · since 2025-11
Amsterdamnl2.dnox.eunl2 · since 2026-01
Amsterdamnl3.dnox.eunl3 · since 2026-01
Amsterdamnl4.dnox.eunl4 · since 2026-03
Amsterdamnl5.dnox.eunl5 · since 2026-03
Frankfurtde.dnox.eude1 · since 2025-12
Zurichch.dnox.euch1 · since 2026-08
Sofiabg.dnox.eubg1 · since 2026-08
Warsawpl.dnox.eupl1 · since 2026-02
Moscowru.dnox.euru1 · degraded, see status

Quick start

Point a CNAME at the edge, set your origin, done. Free until 50 GB/month.

$ dig +short cdn.example.com
edge.dnox.eu.
nl1.dnox.eu.
87.199.199.192

$ curl -sI https://cdn.example.com/app.7f3a91.js
HTTP/2 200
content-type: application/javascript
content-length: 184320
cache-control: public, max-age=31536000, immutable
age: 41207
x-cache: HIT
x-served-by: nl1
vary: accept-encoding

Cache defaults

We do not rewrite your Cache-Control. If the origin sends none, the default is 4 hours for 2xx and 30 seconds for 404.

Compression

Brotli and gzip negotiated per request. Objects above 1 MB use Brotli 6, not 11 — the extra ratio was not worth the CPU on nl2/nl3.

Purge

$ curl -X POST https://api.dnox.eu/v1/purge \
    -H "Authorization: Bearer $DNOX_TOKEN" \
    -d '{"urls":["https://cdn.example.com/assets/*"]}'
{"queued":1,"nodes":11,"eta_seconds":8}
Purge is not atomic across nodes.

Propagation is usually under 10 s, but during that window one node may serve the old object while another serves the new one. If that breaks your deploy, version your filenames instead of purging. We would rather say this than pretend otherwise.

TLS

Certificates

Issued via ACME, renewed at 30 days remaining. Bring-your-own accepted as PEM, full chain, unencrypted key.

Protocol

TLS 1.2 and 1.3 only. 1.0 and 1.1 were removed in 2022 and will not come back. OCSP stapling is on by default.

HSTS

Off by default, on purpose. Once a client caches the header we cannot take it back for you — enable it when you are sure.

Changelog

Full history →
2026-08-04
ch1 (Zurich) and bg1 (Sofia) joined the pool.
2026-07-19
uk1 migrated to a new address. The old IP stays reachable until 2026-09-01.
2026-06-02
HTTP/3 on all nodes. Falls back to h2 where UDP is blocked upstream.
2026-04-11
Brotli lowered 11 → 6 for objects over 1 MB.
2026-02-27
Purge API v1 final. The v0 endpoints are gone.