Het korte antwoord
Wil je een klant je app laten aanbieden op een eigen domein, bijvoorbeeld portal.customer.com, dan registreer je dat domein als custom hostname in je Cloudflare-zone. De klant voegt één CNAME-record toe dat naar jou wijst, Cloudflare controleert of die de hostname beheert, een certificeringsinstantie geeft de certificaten uit en verzoeken bereiken je app.
Per oktober 2026 bevat de planpagina van Cloudflare for SaaS 100 custom hostnames bij de abonnementen Free, Pro en Business, staat er $0.10 per extra hostname en geldt voor die abonnementen een maximum van 50.000 hostnames.
Twee beperkingen bepalen elk ontwerp. Klanten kunnen een kaal apex-domein (customer.com) niet naar jou laten wijzen zonder een betaalde Enterprise-add-on. En wildcard custom hostnames, eigen certificaten en de keuze van certificeringsinstantie zijn alleen beschikbaar voor Enterprise. De inrichting in Cloudflare is een paar stappen. Het productwerk eromheen kost meer tijd, en daar gaat het grootste deel van deze gids over.
Wat een custom hostname is
Een custom hostname is een domein van je klant dat Cloudflare naar jouw zone routeert. De installatiegids kent vier onderdelen:
- SaaS-zone. Je eigen domein bij Cloudflare, met Cloudflare for SaaS ingeschakeld. Een zone op het Free-abonnement is genoeg om te beginnen.
- Fallback-origin. Een geproxied DNS-record, zoals
proxy-fallback.yourapp.com, waar het verkeer van custom hostnames naartoe gaat. - CNAME-doel. Een optionele, vriendelijkere naam waar klanten naar kunnen wijzen, zoals
customers.yourapp.com. - Custom hostname. Het domein van de klant, aangemaakt via de API of het dashboard, met een eigen validatiestatus. Cloudflare geeft voor elk twee certificaten uit: een primair ECDSA P-256-certificaat en een RSA 2048-bit-fallback voor oudere clients.
Draait je app op Cloudflare Workers, het platform waarop Dardo bouwt, dan kan de Worker de fallback-origin zijn. Een */*-route vangt verzoeken voor elke custom hostname op en je code leest de Host-header om de tenant te vinden. Cloudflare biedt ook aangepaste metadata per hostname, maar dat is een betaalde Enterprise-add-on, dus bij andere abonnementen staat die opzoeking in je eigen database, zoals D1.
Hoe de flow werkt
- De klant voert een domein in in de instellingen van je app. Je backend normaliseert het en roept het endpoint Create Custom Hostname aan met een methode voor certificaatvalidatie.
- De klant voegt het DNS-record toe dat jij toont, bijvoorbeeld
portal.customer.com CNAME customers.yourapp.com. - Cloudflare valideert het eigendom van de hostname. Realtime validatie draait zodra de CNAME verschijnt, wat korte downtime kan betekenen. Pre-validatie gebruikt een TXT-record of een HTTP-token vóór DNS-wijzigingen, voor domeinen die al live zijn. Pre-validatie wordt niet ondersteund als de zone van de klant zelf ook bij Cloudflare staat (een "Orange-to-Orange"-opzet).
- De certificeringsinstantie valideert de domeincontrole en geeft de certificaten uit.
- De hostname is klaar wanneer
statusenssl.statusallebeiactivezijn en DNS naar jouw doel wijst. Cloudflare waarschuwt dat een TLS-handshake kan slagen voordatssl.statusactief wordt, dus beschouw het detailendpoint van de custom hostname als de bron van waarheid.
Validatiemethoden voor certificaten
De validatiegids van Cloudflare biedt deze opties:
| Methode | Wat de klant doet | Werkt vóór de DNS-omschakeling | Opmerkingen |
|---|---|---|---|
| HTTP, automatisch | Voegt alleen de CNAME toe | Nee | Het eenvoudigst. Cloudflare raadt het aan als klanten "een paar minuten downtime aankunnen." |
| HTTP, handmatig | Niets als hun domein al naar jou wijst; anders serveren ze jouw token op hun huidige server | Ja | Handig als het domein live is bij een andere provider. |
| TXT | Voegt een TXT-record toe dat jij hun geeft | Ja | Vereist voor wildcard-hostnames. |
| Delegated DCV | Voegt eenmalig één _acme-challenge-CNAME toe | Ja | Laat Cloudflare elk toekomstig certificaat verlengen. Een bestaand _acme-challenge-TXT-record blokkeert dit. |
Validatie wacht niet eindeloos. Cloudflare probeert de hostnamevalidatie 75 keer over zeven dagen opnieuw en volgens het backoff-schema geldt: "als de validatie niet slaagt, wordt de custom hostname verwijderd." Ook certificaattokens verlopen: na 7 dagen bij Let's Encrypt en na 14 dagen bij Google Trust Services of SSL.com.
Wat het kost, per oktober 2026
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| Inbegrepen hostnames | 100 | 100 | 100 | Op maat |
| Prijs per extra hostname | $0.10 | $0.10 | $0.10 | Op maat |
| Maximum aantal hostnames | 50,000 | 50,000 | 50,000 | Onbeperkt (neem contact op met sales boven 50.000) |
| Wildcard custom hostnames | Nee | Nee | Nee | Ja |
| Eigen certificaten en selecteerbare CA | Nee | Nee | Nee | Ja |
| Apex-proxying / BYOIP | Nee | Nee | Nee | Betaalde add-on |
| Aangepaste metadata | Nee | Nee | Nee | Betaalde add-on |
De planpagina noemt de $0.10 zonder periode. In de aankondiging van 2022 beschreef Cloudflare het als een verlaging van de prijs "van $2 naar $0.10 per maand." Tegen dat maandtarief betekent 1.000 klantdomeinen 900 boven de inbegrepen 100, oftewel $90 per maand.
Twee factureringsregels zijn belangrijk voor het productontwerp. Volgens de pagina over quota en facturering van Cloudflare telt elke hostname mee voor het gebruik totdat je die verwijdert, inclusief "hostnames die wachten op validatie of activatie." En niet-Enterprise-abonnementen hebben een API-drempel waarboven nieuwe hostnames worden geweigerd.
Waar het misgaat
Apex-domeinen
De installatiehandleiding van Cloudflare is duidelijk: "By default, using an A record to point to the target is not a supported setup." De meeste DNS-providers staan geen CNAME toe op de root van een domein, dus klanten hebben een subdomein nodig, zoals www.customer.com of app.customer.com. Met Apex proxying krijgt je account vaste IP-prefixes toegewezen, zodat klanten een A-record kunnen gebruiken, maar dat is een Enterprise-add-on met eigen kosten. Zonder die optie vraag je klanten om een subdomein en leg je uit hoe ze het kale domein bij hun DNS-provider daarnaartoe doorsturen.
Certificeringsinstanties en CAA-records
In de referentie over certificeringsinstanties van Cloudflare staan voor custom hostnames Let's Encrypt (certificaten van 90 dagen), Google Trust Services en SSL.com (14, 30 of 90 dagen). De CA kiezen kan alleen met Enterprise; anders gebruikt Cloudflare de standaardinstelling en controleert het eerst de CAA-records. Staan de CAA-records van een klant die CA niet toe, dan mislukt de uitgifte met "CAA records block issuance", en alleen de klant kan dat oplossen. CAA-opzoekingen volgen CNAME-ketens, dus ook de CAA-records van je eigen doeldomein tellen mee. In de handleiding voor probleemoplossing staan de andere fouten aan de kant van de klant: kapotte DNSSEC en DNS-servers die SERVFAIL teruggeven.
Verlengingen
Certificaten voor custom hostnames gelden 90 dagen en kunnen 30 dagen voor het verlopen worden verlengd. Actieve hostnames zonder wildcard worden automatisch verlengd via HTTP. Is een hostname niet meer actief, bijvoorbeeld omdat de klant zijn DNS heeft gewijzigd, dan moet de klant een nieuwe token plaatsen en ben jij verantwoordelijk voor het toesturen ervan. Wildcards kunnen alleen via TXT worden verlengd, en dat automatiseert Delegated DCV.
Klanten bij een andere CDN of bij Cloudflare
Cloudflare zegt dat custom hostnames met een andere CDN niet compatibel zijn wanneer die CDN de DNS-records verbergt. Klanten met domeinen bij Cloudflare brengen het omgekeerde probleem mee: als ze vertrekken en jij hun hostname niet verwijdert, kan die naar jouw dienst blijven routeren, ook nadat ze hun DNS hebben aangepast.
Workers voor validatiepaden
Als een Worker je fallback-origin is, moet die /.well-known/pki-validation/* en /.well-known/acme-challenge/* ongewijzigd doorlaten. Een catch-all-route die antwoordt met de 404-pagina van je app breekt de HTTP-validatie.
Het productwerk eromheen
- Afdwingen van abonnementen. Bepaal welke van je abonnementen eigen domeinen bevatten en hoeveel, en controleer dat voordat je Cloudflare aanroept. De quota en drempels van Cloudflare zijn plafonds, niet jouw prijsmodel.
- Onboardingscherm. Eén invoerveld. Zet de invoer om naar kleine letters, haal protocol en pad weg, weiger kale apex-domeinen tenzij je apex proxying hebt gekocht, en weiger de naam van je eigen zone, die je volgens Cloudflare nooit als custom hostname moet aanmaken. Toon daarna het exacte record dat moet worden toegevoegd, met een kopieerknop.
- Twee statussen in gewone taal. Hostname en certificaat worden apart gevalideerd, dus toon beide. Vertaal
ssl.validation_errorsnaar instructies: "De CAA-records van je domein staan onze certificeringsinstantie niet toe; voeg dit record toe" is beter dan "pending_validation." Het antwoord op het aanmaken bevat mogelijk nog geen validatierecords, dus haal de hostname na een korte vertraging opnieuw op. De webhookmeldingen van Cloudflare rapporteren validatie- en uitgiftegebeurtenissen, wat beter is dan pollen. - Monitoring van verlengingen. Een dagelijkse taak die hostnames markeert waarvan het certificaat niet actief is of waarvan de DNS niet meer naar jou wijst, zodat je team het eerder hoort dan de klant.
- Opruimen. Verwijder hostnames die nooit valideren en die van klanten die vertrekken. Beide worden gefactureerd tot ze zijn verwijderd.
- Tenantisolatie. Bepaal de tenant alleen aan de hand van actieve hostnames in je database. Krijgen tenants ook subdomeinen van jouw domein, dan wijst de domeindocumentatie van Vercel erop dat een cookie die één tenant voor het bovenliggende domein instelt ook bij de anderen aankomt, dus houd je dashboard en login op een apart domein.
- Supportdraaiboek. Een korte pagina voor je team die elke fout koppelt aan wie hem oplost: ontbrekende CNAME, CAA, DNSSEC en SERVFAIL liggen bij de klant; tokens, rate limits van CA's en Worker-routes bij jou.
Dit is het soort werk dat Dardo doet bij webapp-ontwikkeling, en white-label klantportalen zijn de plek waar het vaakst om eigen domeinen wordt gevraagd.
Alternatieven: Vercel en Netlify
Draait je app al ergens anders, dan regelen beide hosts klantdomeinen, met eigen gedocumenteerde limieten per oktober 2026.
| Cloudflare for SaaS | Vercel | Netlify | |
|---|---|---|---|
| Domeinlimieten | 100 inbegrepen, tot 50.000 bij Free, Pro en Business | 50 per project bij Hobby; "Unlimited" bij Pro en Enterprise, met zachte limieten van 100.000 en 1.000.000 | "We recommend assigning no more than 50 domain aliases to a site" |
| Apex-domeinen | Enterprise-add-on | A-record naar de waarde op de domeinkaart van het project | ALIAS, ANAME of afgevlakte CNAME, of een A-record als terugval |
| Certificaten | Automatisch, twee per hostname; eigen certificaten bij Enterprise | Automatisch na domeinverificatie; eigen certificaten bij Enterprise | Automatisch Let's Encrypt; eigen certificaten handmatig verlengd |
| Wildcards | Enterprise | Vereisen Vercel-nameservers of een gedelegeerde _acme-challenge | Automatisch voor domeinen op Netlify DNS |
| Gebouwd voor | Veel klantdomeinen op één zone | Multi-tenant platforms met een REST API en SDK | Hooguit enkele tientallen domeinen per site |
De apex-ondersteuning van Vercel is het duidelijkste verschil: klanten kunnen een kaal domein met een A-record naar Vercel laten wijzen. Let op: het Hobby-abonnement is volgens de fair use-richtlijnen van Vercel beperkt tot "non-commercial, personal use only", dus een betalende SaaS begint op Pro. Door de aanbeveling van Netlify van 50 aliassen past het slecht bij één deployment die honderden klantdomeinen bedient.
Wanneer je het bouwt
Vragen twee of drie klanten ernaar, voeg hun hostnames dan toe in het Cloudflare-dashboard en houd een checklist bij. Bouw de self-serve flow zodra eigen domeinen deel worden van een abonnement dat je verkoopt of van een white-label-aanbod. Hebben klanten op grote schaal kale apex-domeinen of wildcards nodig, praat dan met Cloudflare over Enterprise voordat je rond de limieten heen ontwerpt.
Wil je die flow ingebouwd in je product, met de statussen, meldingen en supportnotities hierboven? Vertel ons over je app.
