La risposta breve
Per far servire la tua app su un dominio del cliente, ad esempio portal.customer.com, registri quel dominio come custom hostname nella tua zona Cloudflare. Il cliente aggiunge un record CNAME che punta a te, Cloudflare verifica che controlli l'hostname, una certification authority emette i certificati e le richieste iniziano ad arrivare alla tua app.
A ottobre 2026, la pagina dei piani di Cloudflare for SaaS include 100 custom hostname nei piani Free, Pro e Business, indica 0,10 $ per ogni hostname aggiuntivo e limita questi piani a 50.000 hostname.
Due limiti condizionano ogni progetto. I clienti non possono puntare a te un dominio apex puro (customer.com) senza un add-on Enterprise a pagamento. E i custom hostname wildcard, i certificati personalizzati e la scelta della certification authority sono solo Enterprise. La configurazione su Cloudflare richiede pochi passaggi. Il lavoro di prodotto intorno richiede più tempo, e questa guida parla soprattutto di quello.
Che cos'è un custom hostname
Un custom hostname è un dominio di proprietà del cliente che Cloudflare instrada verso la tua zona. La guida alla configurazione prevede quattro elementi:
- Zona SaaS. Il tuo dominio su Cloudflare, con Cloudflare for SaaS attivo. Per iniziare basta una zona sul piano Free.
- Origine di fallback. Un record DNS con proxy, come
proxy-fallback.yourapp.com, verso cui va il traffico dei custom hostname. - Target CNAME. Un nome facoltativo e più comprensibile a cui i clienti possono puntare, come
customers.yourapp.com. - Custom hostname. Il dominio del cliente, creato via API o dashboard, con un proprio stato di validazione. Cloudflare emette due certificati per ciascuno: uno principale ECDSA P-256 e uno di fallback RSA a 2048 bit per i client più vecchi.
Se la tua app gira su Cloudflare Workers, la piattaforma su cui costruisce Dardo, il Worker può fare da origine di fallback. Una route */* intercetta le richieste di ogni custom hostname e il tuo codice legge l'header Host per individuare il tenant. Cloudflare offre anche metadati personalizzati per hostname, ma è un add-on Enterprise a pagamento: con gli altri piani quella ricerca resta nel tuo database, ad esempio D1.
Come funziona il flusso
- Il cliente inserisce un dominio nelle impostazioni della tua app. Il backend lo normalizza e chiama l'endpoint Create Custom Hostname indicando un metodo di validazione del certificato.
- Il cliente aggiunge il record DNS che gli mostri, ad esempio
portal.customer.com CNAME customers.yourapp.com. - Cloudflare verifica la proprietà dell'hostname. La validazione in tempo reale parte quando compare il CNAME e può causare un breve downtime. La pre-validazione usa un record TXT o un token HTTP prima delle modifiche DNS, per i domini già attivi. La pre-validazione non è supportata quando anche la zona del cliente è su Cloudflare (configurazione "Orange-to-Orange").
- La certification authority verifica il controllo del dominio ed emette i certificati.
- L'hostname è pronto quando
statusessl.statussono entrambiactivee il DNS punta al tuo target. Cloudflare avverte che un handshake TLS può riuscire prima chessl.statusdiventi active, quindi considera l'endpoint dei dettagli del custom hostname come fonte di verità.
Metodi di validazione del certificato
La guida alla validazione di Cloudflare offre queste opzioni:
| Metodo | Cosa fa il cliente | Funziona prima del cambio DNS | Note |
|---|---|---|---|
| HTTP, automatico | Aggiunge solo il CNAME | No | Il più semplice. Cloudflare lo suggerisce quando i clienti "possono tollerare qualche minuto di downtime". |
| HTTP, manuale | Niente se il dominio punta già a te; altrimenti pubblica il tuo token sul server attuale | Sì | Utile quando il dominio è attivo presso un altro provider. |
| TXT | Aggiunge un record TXT che gli fornisci | Sì | Obbligatorio per gli hostname wildcard. |
| Delegated DCV | Aggiunge una sola volta un CNAME _acme-challenge | Sì | Permette a Cloudflare di rinnovare tutti i certificati futuri. Un record TXT _acme-challenge esistente lo blocca. |
La validazione non aspetta all'infinito. Cloudflare ritenta la validazione dell'hostname 75 volte in sette giorni e, secondo il suo programma di backoff, "se la validazione non riesce, il custom hostname verrà eliminato". Anche i token dei certificati scadono: dopo 7 giorni con Let's Encrypt e dopo 14 giorni con Google Trust Services o SSL.com.
Quanto costa, a ottobre 2026
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| Hostname inclusi | 100 | 100 | 100 | Personalizzato |
| Prezzo per hostname aggiuntivo | $0.10 | $0.10 | $0.10 | Personalizzato |
| Hostname massimi | 50,000 | 50,000 | 50,000 | Illimitati (oltre 50.000 contatta le vendite) |
| Custom hostname wildcard | No | No | No | Sì |
| Certificati personalizzati e CA selezionabile | No | No | No | Sì |
| Apex proxying / BYOIP | No | No | No | Add-on a pagamento |
| Metadati personalizzati | No | No | No | Add-on a pagamento |
La pagina dei piani riporta 0,10 $ senza indicare il periodo. L'annuncio del 2022 di Cloudflare lo descriveva come una riduzione del prezzo "da 2 $ a 0,10 $ al mese". Con quella tariffa mensile, 1.000 domini dei clienti significano 900 oltre i 100 inclusi, cioè 90 $ al mese.
Due regole di fatturazione contano per la progettazione del prodotto. Secondo la pagina su quote e fatturazione di Cloudflare, ogni hostname viene conteggiato finché non lo elimini, compresi gli "hostname in attesa di validazione o attivazione". Inoltre i piani non Enterprise hanno una soglia di applicazione via API oltre la quale i nuovi hostname vengono rifiutati.
Dove si inceppa
Domini apex
La guida alla configurazione di Cloudflare è esplicita: "Per impostazione predefinita, usare un record A per puntare al target non è una configurazione supportata". La maggior parte dei provider DNS non consente un CNAME alla radice di un dominio, quindi i clienti devono usare un sottodominio come www.customer.com o app.customer.com. L'apex proxying assegna al tuo account prefissi IP statici così i clienti possono usare un record A, ma è un add-on Enterprise con un costo a parte. Senza, chiedi ai clienti un sottodominio e spiega come inoltrare il dominio nudo verso di esso dal loro provider DNS.
Certification authority e record CAA
Il riferimento sulle certification authority di Cloudflare elenca Let's Encrypt (certificati da 90 giorni), Google Trust Services e SSL.com (14, 30 o 90 giorni) per i custom hostname. Scegliere la CA è solo Enterprise; altrimenti Cloudflare usa quella predefinita e controlla prima i record CAA. Se i record CAA del cliente non consentono quella CA, l'emissione fallisce con "CAA records block issuance" e solo il cliente può risolvere. Le ricerche CAA seguono le catene di CNAME, quindi contano anche i record CAA del tuo dominio target. La guida alla risoluzione dei problemi elenca gli altri errori lato cliente: DNSSEC non funzionante e server DNS che rispondono SERVFAIL.
Rinnovi
I certificati dei custom hostname durano 90 giorni e possono essere rinnovati 30 giorni prima della scadenza. Gli hostname attivi non wildcard si rinnovano automaticamente via HTTP. Se un hostname non è più attivo, ad esempio perché il cliente ha cambiato il DNS, il cliente deve inserire un nuovo token e sta a te inviarglielo. I wildcard si possono rinnovare solo tramite TXT, ed è ciò che Delegated DCV automatizza.
Clienti con un'altra CDN o su Cloudflare
Cloudflare dichiara che i custom hostname che usano un'altra CDN non sono compatibili quando quella CDN nasconde i record DNS. I clienti con domini su Cloudflare pongono il problema opposto: se se ne vanno e tu non elimini il loro hostname, può continuare a instradare verso il tuo servizio anche dopo che hanno cambiato DNS.
Worker davanti ai percorsi di validazione
Se un Worker è la tua origine di fallback, deve lasciar passare invariati /.well-known/pki-validation/* e /.well-known/acme-challenge/*. Una route catch-all che risponde con la pagina 404 della tua app interrompe la validazione HTTP.
Il lavoro di prodotto intorno
- Controllo dei piani. Decidi quali dei tuoi piani includono domini personalizzati e quanti, e verificalo prima di chiamare Cloudflare. Quota e soglia di Cloudflare sono tetti massimi, non il tuo listino.
- Schermata di onboarding. Un solo campo. Converti in minuscolo, rimuovi protocollo e percorso, rifiuta i domini apex nudi a meno che tu non abbia acquistato l'apex proxying e rifiuta il nome della tua zona, che secondo Cloudflare non va mai creato come custom hostname. Poi mostra il record esatto da aggiungere, con un pulsante per copiarlo.
- Due stati in linguaggio semplice. Hostname e certificato si validano separatamente, quindi mostra entrambi. Traduci
ssl.validation_errorsin istruzioni: "I record CAA del tuo dominio non consentono la nostra certification authority; aggiungi questo record" è meglio di "pending_validation". La risposta di creazione potrebbe non includere ancora i record di validazione, quindi richiedi di nuovo l'hostname dopo una breve attesa. Le notifiche webhook di Cloudflare segnalano gli eventi di validazione ed emissione, meglio del polling. - Monitoraggio dei rinnovi. Un job giornaliero che segnala gli hostname con certificato non attivo o con DNS che non punta più a te, così il tuo team lo sa prima del cliente.
- Pulizia. Elimina gli hostname che non si validano mai e quelli dei clienti che se ne vanno. Entrambi vengono fatturati finché non li elimini.
- Isolamento dei tenant. Individua il tenant solo dagli hostname attivi nel tuo database. Se i tenant ricevono anche sottodomini del tuo dominio, la documentazione sui domini di Vercel segnala che un cookie impostato da un tenant sul dominio padre raggiunge anche gli altri, quindi tieni dashboard e login su un dominio separato.
- Playbook di supporto. Una breve pagina per il tuo team che associa ogni errore a chi lo risolve: CNAME mancante, CAA, DNSSEC e SERVFAIL spettano al cliente; token, rate limit della CA e route del Worker spettano a te.
È il tipo di lavoro che Dardo svolge nello sviluppo di web app, e i portali clienti in white label sono il contesto in cui i domini personalizzati vengono richiesti più spesso.
Alternative: Vercel e Netlify
Se la tua app gira già altrove, entrambi gli host gestiscono i domini dei clienti, con limiti propri documentati a ottobre 2026.
| Cloudflare for SaaS | Vercel | Netlify | |
|---|---|---|---|
| Limiti di domini | 100 inclusi, fino a 50.000 su Free, Pro e Business | 50 per progetto su Hobby; "Unlimited" su Pro ed Enterprise, con limiti soft di 100.000 e 1.000.000 | "Consigliamo di assegnare non più di 50 alias di dominio a un sito" |
| Domini apex | Add-on Enterprise | Record A verso il valore indicato nella scheda del dominio del progetto | ALIAS, ANAME o CNAME flattening, oppure un record A come alternativa |
| Certificati | Automatici, due per hostname; certificati personalizzati su Enterprise | Automatici dopo la verifica del dominio; certificati personalizzati su Enterprise | Let's Encrypt automatico; certificati personalizzati rinnovati a mano |
| Wildcard | Enterprise | Richiedono i nameserver di Vercel o un _acme-challenge delegato | Automatici per i domini su Netlify DNS |
| Pensato per | Molti domini di clienti su una sola zona | Piattaforme multi-tenant con API REST e SDK | Al massimo qualche decina di domini per sito |
Il supporto apex di Vercel è la differenza più netta: i clienti possono puntarvi un dominio nudo con un record A. Nota che il piano Hobby è limitato a "uso personale e non commerciale" secondo le linee guida sul fair use di Vercel, quindi un SaaS a pagamento parte dal piano Pro. La raccomandazione di Netlify di 50 alias rende questa piattaforma poco adatta a un singolo deployment che serve centinaia di domini di clienti.
Quando costruirlo
Se te lo chiedono due o tre clienti, aggiungi i loro hostname dalla dashboard di Cloudflare e tieni una checklist. Costruisci il flusso self-service quando i domini personalizzati diventano parte di un piano che vendi o di un'offerta white label. Se i clienti hanno bisogno di domini apex nudi o di wildcard su larga scala, parla con Cloudflare di Enterprise prima di progettare intorno ai limiti.
Se vuoi quel flusso integrato nel tuo prodotto, con stati, avvisi e note di supporto descritti sopra, raccontaci della tua app.
