Cómo servir dominios personalizados que apuntan a un subdominio en la aplicación Saas

Quiero crear una aplicación SaaS de ejemplo, mediante la cual los usuarios puedan registrarse, crear páginas web, usar plantillas y/o personalizarlas con CSS personalizado, servir sus páginas web desde dominios personalizados.

Estaba considerando guardar las plantillas en S3/otros CDN, junto con archivos multimedia/hojas de estilo/js. Si bien todos son técnicamente posibles (¿prácticos? Eso podría ser discutible). De todos modos, estaba teniendo dificultades para averiguar cómo se servirían los sitios web fuera de los dominios personalizados en este caso. Por ejemplo, cuando se registran, pueden obtener un subdomain.domain.com habla a. Sin embargo, ¿cómo apuntan customerdomain.com para que cuando customerdomain.com se ingresa, sirve el mismo contenido que customerdomain.domain.comy la URL permanece customerdomain.com

Además, si quiero tener un "feature" por lo que los dominios personalizados podrían ser una función de pago. ¿Cómo lo restringiría solo a los usuarios de pago?

Normalmente, cuando configuramos sitios web, lo especificamos en el archivo de configuración del host virtual (Apache) y le damos alias, para que busque y sirva esos alias. En este caso, no quiero tener un archivo vhost separado para cada persona que se registre. ¿Hay alguna alternativa? ¿Cómo puedo programar esto? ¿Hay algún problema a tener en cuenta?

Una solución que he visto es hacer que el servidor sirva un dominio comodín, es decir *.domain.com, y un host virtual separado para cada dominio personalizado, sin embargo, preferiría evitarlo si puedo.

Gracias.

preguntado el 03 de mayo de 12 a las 21:05

1 Respuestas

El dominio personalizado generalmente se realiza a través de un registro DNS CNAME (una especie de enlace simbólico para registros DNS). Le dice a su cliente (que generalmente tiene el control de dominiocliente.com) que cree un registro CNAME que diga que dominiocliente.com es un alias para dominiocliente.dominio.com. Luego, debe configurar su propio servidor para interpretar las solicitudes a dominiocliente.com de la misma manera que trataría las solicitudes a dominiocliente.dominio.com.

Dependiendo de cómo sirva sus subdominios, esto se puede hacer de diferentes maneras.

Si tiene un archivo vhost para cada cliente, debe agregar una directiva "ServerAlias" para el dominio personalizado que proporcionó su cliente.

Si está codificando el punto de entrada a través de su propio servidor de aplicaciones (digamos, leyendo el encabezado HTTP "Host" de PHP y luego configurando el nombre del cliente a partir de eso), entonces necesita ajustar ese código en consecuencia para interpretar las solicitudes de dominios externos de acuerdo con su propia base de datos de dominios personalizados. ¡Incluso puedes usar DNS directo para esto!

Algo en las líneas de:

if http "host" header does not end in domain.com:
    cname = get_cname_record(http "host" header value)
    if cname does not end in domain.com:
        return error 404
    else:
        site = first part of cname
else:
    site = first part of http "host" header

Luego puede usar DNS como su "base de datos de dominio personalizada". Sin embargo, asegúrese de estar utilizando un caché de DNS, ya que esas consultas se realizarán en cada solicitud.

Respondido el 21 de junio de 12 a las 20:06

gracias, su pseudocódigo ayudó a comprender la solución. Acerca del caché de DNS, en un servidor, ¿no es predeterminado? Me refiero a que el sistema operativo (ubuntu) almacena en caché las consultas de DNS. ¿Tengo que hacer algo extra para eso? - Nasir

Eso depende de cómo implemente "get_cname_record". Si usa gethostbyaddr() o un derivado (la opción más probable), su sistema generalmente ya proporciona algún tipo de almacenamiento en caché. Pero haz un benchmark haciendo un bucle de búsquedas para que no caigas en una trampa con esto. Lo he visto suceder, así que solo para tu información. - GomoX

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.