2012-05-03 17 views
10

Voglio creare un esempio di app SaaS, in cui gli utenti possono registrarsi, creare pagine Web, utilizzare modelli e/o personalizzarli con css personalizzati, pubblicare le loro pagine Web off domini personalizzati.Come servire domini personalizzati che puntano a un sottodominio nell'app Saas

Stavo pensando di salvare i modelli su S3/altri CDN, insieme a file media/stylesheets/js. Mentre tutti sono tecnicamente possibili (pratico? Che potrebbe essere discutibile). Ad ogni modo, stavo avendo difficoltà a capire come i siti web sarebbero serviti da domini personalizzati in questo caso? Ad esempio, quando si registrano, possono ottenere un indirizzo subdomain.domain.com. Tuttavia, come fanno puntano customerdomain.com in modo che quando viene inserito customerdomain.com, serve stesso contenuto customerdomain.domain.com, e l'URL rimane customerdomain.com

Inoltre, se voglio avere un "feature", per cui, domini personalizzati potrebbero essere una caratteristica a pagamento. Come potrei limitarlo solo agli utenti a pagamento?

Normalmente quando configuriamo i siti Web, lo specifichiamo nel file di configurazione dell'host virtuale (apache) e gli diamo alias, quindi cerca e serve quegli alias. In questo caso, non voglio avere un file vhost separato per ogni persona che si iscrive. C'è un'alternativa? Come posso programmare questo? Ci sono dei trucchi da prendere in considerazione?

Una soluzione che ho visto è quella di avere un server con dominio jolly i.e *.domain.com e un vhost separato per ciascun dominio personalizzato, tuttavia preferirei evitare se possibile.

Grazie.

risposta

6

Il dominio personalizzato viene generalmente eseguito tramite un record DNS CNAME (una sorta di collegamento simbolico per i record DNS). Dì al tuo cliente (che di solito ha il controllo di customerdomain.com) per creare un record CNAME che dice che customerdomain.com è un alias per customerdomain.domain.com. Quindi devi configurare il tuo server per interpretare le richieste a customerdomain.com allo stesso modo in cui tratterebbe le richieste a customerdomain.domain.com.

A seconda di come vengono serviti i sottodomini, ciò può essere fatto in diversi modi.

Se si dispone di un file vhost per ogni singolo cliente, è necessario aggiungere una direttiva "ServerAlias" per il dominio personalizzato fornito dal client.

Se si sta codificando il punto di ingresso tramite il proprio server delle applicazioni (ad esempio, leggendo l'intestazione HTTP "Host" da PHP e quindi impostando il nome del cliente da quello), è necessario regolare tale codice di conseguenza per interpretare le richieste per l'esterno domini secondo il proprio database di domini personalizzati. Puoi anche usare il DNS dritto per questo!

Qualcosa sulla falsariga di:

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 

quindi è possibile utilizzare DNS come "database di dominio personalizzato". Assicurati di utilizzare una cache DNS, poiché tali query verranno eseguite su ogni singola richiesta.

+0

grazie, il tuo psuedocode ha aiutato a comprendere la soluzione. A proposito di cache DNS, su un server non è predefinito? Voglio dire che le query DNS sono memorizzate nella cache dal sistema operativo (ubuntu). Devo fare qualcosa in più per questo? – Nasir

+0

Dipende da come si implementa "get_cname_record". Se si utilizza gethostbyaddr() o un derivato (l'opzione più probabile) il sistema in genere fornisce già una sorta di memorizzazione nella cache. Ma analizzalo facendo un ciclo di ricerche in modo da non cadere in una trappola con questo. L'ho visto accadere, quindi solo una FYI. – GomoX

Problemi correlati