↑ top
← Back to blog
EN | ES

Cómo hospedar un sitio personal en Cloudflare Workers con dominio propio — Lo que nadie te cuenta.

Tres problemas que ningún tutorial menciona: dominios apex, rutas wildcard y páginas de parking DNS.

✦ AI Summary

Pasé una tarde configurando lo que debería haber sido una página personal simple en Cloudflare Workers with dominio propio. Funcionó — pero no antes de toparme con tres problemas that ningún tutorial menciono. Este post documenta exactamente qué falló y cómo lo resolví.

Cómo hospedar un sitio personal en Cloudflare Workers con dominio propio — Lo que nadie te cuenta.

Pasé una tarde configurando lo que debería haber sido una página personal simple en Cloudflare Workers con dominio propio. Funcionó — pero no antes de toparme con tres problemas que ningún tutorial mencionó. Este post documenta exactamente qué falló y cómo lo resolví, para que no pierdas el mismo tiempo.

El stack

Nada exótico:

  • Cloudflare Workers — sirve el HTML directamente desde el edge, sin servidor de origen
  • Wrangler — despliega el Worker desde la terminal
  • Dominio propio registrado y administrado en Cloudflare Registrar

El Worker en sí es simple: un handler fetch que retorna un string HTML con Content-Type: text/html. Sin framework, sin build step, sin bucket S3.

js// src/worker.js
export default {
  async fetch(request, env, ctx) {
    return new Response(HTML, {
      headers: {
        "Content-Type": "text/html;charset=UTF-8",
        "Cache-Control": "public, max-age=3600",
      },
    });
  },
};

El deploy es un solo comando:

bashnpx wrangler deploy

Eso te da una URL funcional en tu-worker.workers.dev. Lo difícil es conectar tu propio dominio.

Problema 1: El dominio apex no es un "Custom Domain"

Cloudflare Workers te permite agregar Custom Domains en Workers & Pages → tu worker → Domains. Escribes tu dominio y él conecta todo automáticamente.

El problema: no acepta dominios apex (tudominio.com). Solo acepta subdominios (www.tudominio.com, blog.tudominio.com, etc.).

Si intentas escribir tudominio.com en el campo de Custom Domain, obtienes:

Only domains active on your Cloudflare account can be added.

Lo cual es confuso porque tu dominio SÍ está activo en tu cuenta. La razón real es que los dominios apex no pueden tener CNAME — es una limitación de la especificación DNS, no un bug de Cloudflare.

La solución: Agrega www.tudominio.com como Custom Domain. Cloudflare crea el registro DNS del Worker automáticamente. Luego maneja el apex por separado.

Problema 2: La ruta wildcard rompió todo

Mientras intentaba cubrir el apex, agregué una Route: *.tudominio.com/*. La intención era capturar todos los subdominios y enrutarlos al Worker.

Esto rompió tanto www como el apex. El Worker dejó de responder — curl hacía timeout en el puerto 443.

El motivo: la ruta wildcard interceptaba los requests antes de que el mapeo de Custom Domain pudiera procesarlos, y como *.tudominio.com/* no hace match con el apex, el apex quedó sin handler.

La solución: Eliminar la ruta wildcard por completo. Routes y Custom Domains entran en conflicto cuando se superponen. Usa uno u otro, no ambos.

Problema 3: El registro DNS del apex

Sin la ruta wildcard, www.tudominio.com funcionaba pero tudominio.com seguía retornando NXDOMAIN o un 522.

El problema: el DNS tenía un CNAME para el apex apuntando a la página de parking por defecto de Cloudflare. Ese registro bloqueaba al Worker para que no pudiera tomar control del apex.

La secuencia que funcionó:

  1. Eliminar el CNAME de parking para @
  2. Cloudflare crea automáticamente un registro DNS de tipo Worker para el apex
  3. Agregar www.tudominio.com como Custom Domain — esto crea su propio registro Worker para www

Estado final del DNS

Tipo Nombre Contenido Proxy
Worker tudominio.com tu-worker ✅ On
Worker www tu-worker ✅ On
MX tudominio.com mail server ⬜ Off
TXT tudominio.com SPF record ⬜ Off

Qué haría diferente

  • Empezar con www como primario. Agrégalo como Custom Domain primero, verifica que funciona, luego lidia con el apex.
  • No tocar Routes a menos que tengas una necesidad específica de enrutamiento. Para un sitio simple de un solo Worker, los Custom Domains son suficientes.
  • Eliminar el CNAME de parking temprano. Bloquea al Worker de reclamar el apex y los mensajes de error no lo hacen obvio.

El resultado

Una página estática servida desde el edge de Cloudflare en ~50ms globalmente, sin servidor de origen, sin mantenimiento y con $0 de hosting. El único costo es el registro del dominio.

El enfoque con Workers está subestimado para sitios personales. Tienes control total sobre la respuesta — headers, caché, lógica de enrutamiento — sin gestionar ninguna infraestructura.


Próximo post: agregar un blog a un Cloudflare Worker sin CMS.

Was this helpful?