Dominios y DNS
Tabla de Contenidos
- Dominio Raiz
- Mapa de Subdominios
- Convencion de Nombres
- Tipos de Registros DNS
- Arbol de Subdominios por Ambiente
- Flujo de Resolucion DNS
- Configuracion Cloudflare
- Troubleshooting DNS
1. Dominio Raiz
El dominio principal de Nvito es nvito.mx, registrado y gestionado integramente a traves de Cloudflare Registrar. Esta decision consolida DNS, proxy, SSL, WAF y registrar en un solo proveedor, eliminando la necesidad de coordinar nameservers entre servicios.
| Campo | Valor |
|---|---|
| Dominio | nvito.mx |
| Registrar | Cloudflare Registrar |
| Nameservers | Cloudflare (automatico al usar CF Registrar) |
| Renovacion | Anual (~$10.11 USD/ano para .mx) |
| WHOIS Privacy | Incluido por Cloudflare |
| DNSSEC | Habilitado automaticamente |
Por que Cloudflare Registrar
Cloudflare cobra el precio de costo del registro de dominio sin markup. Al tener el dominio y el DNS en el mismo proveedor, no hay propagacion de nameservers y los cambios DNS toman efecto en segundos.
2. Mapa de Subdominios
Nvito utiliza 16 subdominios distribuidos en 3 ambientes (produccion, DEV y TEST). Cada subdominio apunta a un servicio especifico con un proposito bien definido.
2.1 Produccion
| Subdominio | Servicio | Hosting | Acceso | Descripcion |
|---|---|---|---|---|
nvito.mx | Landing page | Cloudflare Pages | Publico | Sitio institucional y marketing |
app.nvito.mx | nvito-pwa | Railway | Publico | Progressive Web App para invitados y anfitriones |
inv.nvito.mx | nvito-invitations | Railway | Publico | Micrositios de invitaciones generados por el motor |
api.nvito.mx | Cloudflare Worker → Railway | Worker proxy | Publico (API) | API REST backend, protegida por Worker que oculta el origin |
cdn.nvito.mx | Cloudflare R2 | R2 Custom Domain | Publico | Imagenes, assets, templates HTML de invitaciones |
admin.nvito.mx | nvito-admin | Railway | Privado (CF Access + Clerk) | Panel administrativo para gestion de eventos |
docs.nvito.mx | nvito-docs | Cloudflare Pages | Privado (CF Access) | Documentacion tecnica y de negocio |
2.2 DEV (rama develop)
| Subdominio | Servicio | Hosting | Acceso |
|---|---|---|---|
dev-api.nvito.mx | nvito-api (dev) | VPS + Coolify | Publico (API) |
dev-admin.nvito.mx | nvito-admin (dev) | VPS + Coolify | Privado (CF Access + Clerk) |
dev-app.nvito.mx | nvito-pwa (dev) | VPS + Coolify | Publico |
dev-inv.nvito.mx | nvito-invitations (dev) | VPS + Coolify | Publico |
2.3 TEST (rama test)
| Subdominio | Servicio | Hosting | Acceso |
|---|---|---|---|
test-api.nvito.mx | nvito-api (test) | VPS + Coolify | Publico (API) |
test-admin.nvito.mx | nvito-admin (test) | VPS + Coolify | Privado (CF Access + Clerk) |
test-app.nvito.mx | nvito-pwa (test) | VPS + Coolify | Publico |
test-inv.nvito.mx | nvito-invitations (test) | VPS + Coolify | Publico |
admin siempre protegido
Independientemente del ambiente, admin.nvito.mx, dev-admin.nvito.mx y test-admin.nvito.mx estan protegidos con Cloudflare Access (Zero Trust). El acceso publico directo esta bloqueado; se requiere autenticacion via email OTP antes de llegar a Clerk.
3. Convencion de Nombres
La convencion de nombres sigue un patron predecible que permite identificar inmediatamente el ambiente y el servicio de cualquier subdominio.
Produccion
{servicio}.nvito.mx
Donde {servicio} es uno de: app, inv, api, cdn, admin, docs. El dominio raiz nvito.mx se reserva para la landing page.
Ambientes no productivos
{env}-{servicio}.nvito.mx
Donde {env} es dev o test, y {servicio} es el mismo identificador que en produccion.
Ejemplos
| Patron | Produccion | DEV | TEST |
|---|---|---|---|
| API Backend | api.nvito.mx | dev-api.nvito.mx | test-api.nvito.mx |
| Panel Admin | admin.nvito.mx | dev-admin.nvito.mx | test-admin.nvito.mx |
| Invitaciones | inv.nvito.mx | dev-inv.nvito.mx | test-inv.nvito.mx |
| PWA | app.nvito.mx | dev-app.nvito.mx | test-app.nvito.mx |
Consistencia con variables de entorno
Las variables CORS_ORIGINS, FRONTEND_URL y CDN_URL en cada ambiente siguen exactamente esta convencion. Si se agrega un nuevo servicio, el subdominio debe seguir el mismo patron.
4. Tipos de Registros DNS
Nvito utiliza 4 tipos principales de registros DNS en Cloudflare, cada uno con un proposito distinto.
4.1 Registro A (Address)
Apunta un subdominio a una direccion IPv4 fija. Se usa para los subdominios que apuntan al VPS de Contabo donde corre Coolify.
dev-api.nvito.mx A 212.28.185.197 Proxied
dev-admin.nvito.mx A 212.28.185.197 Proxied
test-api.nvito.mx A 212.28.185.197 Proxied
test-admin.nvito.mx A 212.28.185.197 Proxied
Todos apuntan a la misma IP del VPS. Traefik (dentro de Coolify) rutea al contenedor correcto segun el header Host.
4.2 Registro CNAME (Canonical Name)
Apunta un subdominio a otro dominio (alias). Se usa para servicios managed que proveen su propio dominio.
nvito.mx CNAME nvito-landing.pages.dev # Cloudflare Pages
docs.nvito.mx CNAME nvito-docs.pages.dev # Cloudflare Pages
cdn.nvito.mx CNAME {account}.r2.cloudflarestorage.com # R2 Custom Domain
app.nvito.mx CNAME {service}.up.railway.app # Railway (futuro)
4.3 Registro TXT (Text)
Almacena texto arbitrario. Se usa principalmente para verificacion de propiedad y seguridad de email.
nvito.mx TXT "v=spf1 include:_spf.google.com ~all"
_dmarc.nvito.mx TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@nvito.mx"
| Registro | Proposito |
|---|---|
| SPF | Define que servidores pueden enviar email en nombre de nvito.mx |
| DMARC | Politica de validacion de email: quarantine para mensajes que fallen SPF/DKIM |
4.4 Registro MX (Mail Exchange)
Define los servidores de correo entrante. Actualmente no se recibe correo en nvito.mx, pero se configura si se necesita en el futuro.
5. Arbol de Subdominios por Ambiente
6. Flujo de Resolucion DNS
Cuando un usuario accede a cualquier subdominio de Nvito, el flujo de resolucion pasa por Cloudflare antes de llegar al origin server.
Puntos clave del flujo
- Anycast: Cloudflare utiliza una red Anycast global. El DNS siempre resuelve a la IP del edge node mas cercano al usuario, no a la IP real del origin.
- Proxy mode: Todos los subdominios tienen el proxy de Cloudflare habilitado (icono naranja en el dashboard). Esto oculta la IP real del origin.
- SSL termination: Cloudflare termina SSL en el edge y re-encripta la conexion al origin (modo Full).
- Cache: Los assets estaticos (imagenes, CSS, JS) se cachean en el edge. Las respuestas de API no se cachean.
7. Configuracion Cloudflare
7.1 SSL/TLS
| Configuracion | Valor | Descripcion |
|---|---|---|
| Modo SSL | Full (Strict) | Cloudflare verifica el certificado del origin |
| Always Use HTTPS | Habilitado | Redirect automatico HTTP → HTTPS |
| Minimum TLS Version | 1.2 | Rechaza conexiones TLS 1.0 y 1.1 |
| HSTS | Habilitado | max-age=31536000; includeSubDomains |
| Automatic HTTPS Rewrites | Habilitado | Reescribe URLs http:// en el HTML |
7.2 Proxy Mode
Todos los subdominios activos tienen el proxy de Cloudflare habilitado (icono naranja). Esto significa que:
- La IP real del origin nunca se expone en respuestas DNS publicas
- Todo el trafico pasa por el edge de Cloudflare para DDoS protection, WAF y cache
- Los headers
CF-Connecting-IPyX-Forwarded-Forcontienen la IP real del cliente
Nunca desactivar proxy mode en produccion
Si se desactiva el proxy (icono gris / DNS Only), la IP real del origin queda expuesta y se pierde toda la proteccion de Cloudflare: WAF, DDoS, SSL edge, Access. Solo se usa DNS Only para registros MX o TXT que no soportan proxy.
7.3 TTL de Registros DNS
| Contexto | TTL | Razon |
|---|---|---|
| Proxied records | Auto (300s) | Cloudflare controla el TTL cuando el proxy esta activo |
| DNS Only records | 3600s (1h) | TTL estandar para registros no proxied (MX, TXT) |
Cuando un registro esta proxied, Cloudflare ignora el TTL configurado y usa su propio (tipicamente 300 segundos). Esto permite propagacion rapida de cambios.
7.4 Page Rules y Configuration Rules
| Regla | Aplica a | Configuracion |
|---|---|---|
| Cache Level: Standard | cdn.nvito.mx/* | Cache agresivo para assets estaticos |
| Browser Cache TTL: 4h | cdn.nvito.mx/* | Assets cached en el browser 4 horas |
| Security Level: High | api.nvito.mx/* | Challenge sospechosos antes de llegar al API |
| Cache Level: Bypass | api.nvito.mx/v1/* | Nunca cachear respuestas de la API REST |
8. Troubleshooting DNS
8.1 Propagacion DNS
Problema: Un cambio de DNS no se refleja inmediatamente.
Diagnostico:
# Verificar resolucion actual
dig admin.nvito.mx +short
# Verificar directamente contra nameservers de Cloudflare
dig @1.1.1.1 admin.nvito.mx +short
# Verificar TTL restante
dig admin.nvito.mx +noall +answer
Solucion: Los registros proxied de Cloudflare propagan en segundos. Si el cambio no se refleja, limpiar cache DNS local (sudo dscacheutil -flushcache en macOS) y verificar que no haya cache del browser.
8.2 Error 526 (Invalid SSL Certificate)
Problema: Cloudflare muestra error 526 al acceder a un subdominio.
Causa: El modo SSL esta en "Full (Strict)" pero el origin no tiene un certificado valido.
Solucion:
- Verificar que el origin tiene SSL (Let's Encrypt via Coolify/Traefik, o Railway auto-SSL)
- Si el certificado expiro, renovar en Coolify o cambiar temporalmente a modo "Full" (sin Strict)
- Para origins sin SSL propio, usar un Cloudflare Origin Certificate (15 anos, gratuito)
8.3 Proxy Mode vs DNS Only
Problema: Un subdominio no carga o muestra timeout.
Diagnostico: Verificar si el registro esta proxied:
# Si retorna IP de Cloudflare (104.x.x.x, 172.x.x.x) → proxied
# Si retorna IP del VPS (212.28.185.197) → DNS Only
dig admin.nvito.mx +short
Causa comun: Si el registro esta en DNS Only, el trafico va directo al VPS sin pasar por Cloudflare. Si el VPS no tiene SSL configurado para ese dominio, el navegador rechaza la conexion.
8.4 Cache de Cloudflare
Problema: Cambios en la aplicacion no se reflejan en el navegador.
Solucion:
- Purge cache en Cloudflare: Dashboard > Caching > Purge Everything (o por URL especifica)
- Development Mode: Activar temporalmente en Cloudflare para bypass de cache (3 horas)
- Verificar headers de cache:
curl -I https://cdn.nvito.mx/path/to/assety revisarCF-Cache-Status
| CF-Cache-Status | Significado |
|---|---|
HIT | Servido desde cache de Cloudflare |
MISS | Origin consultado, respuesta cacheada para proximas requests |
BYPASS | Cache deshabilitado para esta ruta |
DYNAMIC | Contenido dinamico, no cacheable |
EXPIRED | Cache existia pero el TTL expiro, se re-valido con origin |