2012-05-03 8 views
10

Quiero crear una aplicación SaaS de ejemplo, mediante la cual los usuarios pueden registrarse, crear páginas web, usar plantillas y personalizarlas con CSS personalizado, servir sus páginas web fuera de los dominios personalizados.Cómo servir dominios personalizados que apuntan a un subdominio en la aplicación Saas

Estaba considerando guardar las plantillas en S3/other CDNs, junto con los archivos media/stylesheets/js. Si bien todos son técnicamente posibles (¿prácticos ?, eso podría ser discutible). De todas formas, ¿me estaba costando imaginar cómo se servirían los sitios web fuera de los dominios personalizados en este caso? Por ejemplo, cuando se registran, pueden obtener una dirección subdomain.domain.com. Sin embargo, ¿cómo se apuntan customerdomain.com de modo que cuando se introduce customerdomain.com, sirve mismo contenido que customerdomain.domain.com, y la URL sigue siendo customerdomain.com

Además, si quiero tener una "feature" mediante el cual, los dominios personalizados podría ser una función de pago. ¿Cómo lo restringiría solo a usuarios pagados?

Normalmente cuando configuramos sitios web, lo especificamos en un archivo de configuración de host virtual (apache) y le damos alias, de modo que busca y sirve esos alias. En este caso, no quiero tener un archivo vhost separado para cada persona que se registre. ¿Hay una alternativa? ¿Cómo puedo programar esto? ¿Hay algún problema que 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 independiente para cada dominio personalizado, pero preferiría evitarlo si pudiera.

Gracias.

Respuesta

6

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 customerdomain.com) que cree un registro CNAME que diga que customerdomain.com es un alias para customerdomain.domain.com. Luego debe configurar su propio servidor para interpretar las solicitudes a customerdomain.com de la misma manera que trataría las solicitudes a customerdomain.domain.com.

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

Si tiene un archivo vhost para cada uno de los clientes, debe agregar una directiva "ServerAlias" para el dominio personalizado que su cliente haya proporcionado.

Si está codificando el punto de entrada a través de su propio servidor de aplicaciones (por ejemplo, leyendo el encabezado HTTP "Host" de PHP y luego estableciendo el nombre del cliente), entonces debe ajustar ese código para interpretar las solicitudes de dominios según su propia base de datos de dominios personalizados. ¡Incluso puedes usar DNS directo para esto!

algo en la línea 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 

continuación, puede utilizar DNS como su "base de datos de dominio personalizado". Sin embargo, asegúrese de estar usando un caché de DNS, ya que esas consultas se realizarán en cada solicitud.

+0

gracias, su psuedocode ayudó a comprender la solución. Acerca de la memoria caché de DNS, ¿no es un servidor predeterminado? Quiero decir que las consultas DNS están en la memoria caché del sistema operativo (ubuntu). ¿Tengo que hacer algo extra por eso? – Nasir

+0

Eso depende de cómo implemente "get_cname_record". Si usa gethostbyaddr() o una derivada (la opción más probable), su sistema normalmente proporciona algún tipo de almacenamiento en caché. Pero hágalo referencia bucleando un montón de búsquedas para que no caiga en una trampa con esto. Lo he visto suceder, así que solo un FYI. – GomoX

Cuestiones relacionadas