Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have a webapp where users can create their account and use the service. Now I want to give them a custom domain facility where app.customer1web.com points_to myservice.com with userid customer1 once he sets up the custom domain, for the world it looks like my service is running on his machine. Many services like blogger, wp.com, tumblr give this feature.

how do i do that? I am using java to write my web app. How do i map domain name to userid when request comes in?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
191 views
Welcome To Ask or Share your Answers For Others

1 Answer

How do i map domain name to userid when request comes in?

Obviously, you'll have to store that information somewhere, most likely in a database.

  1. Add a database table domains with columns:

    • customerId
    • name
    • active (1 or NULL)
    • challenge

    Add unique key for (name, active) to ensure a domain name is mapped only once.

  2. When a customer attempts to add a domain, add a row with active=NULL and challenge set to a random string.

    Show the random string to the customer and ask them to put up a web page with it on the site or create a dummy DNS record with it to verify domain ownership (this is how Google Apps do it).

    You could verify ownership by sending an email to the administrative contact or in some other way.

  3. When the customer says he did what you instructed them to do in step #2, verify it and set active=1, challenge=NULL.

    If the domain was previously active for some other customer, delete those records or set active=0.

  4. Ask the customer to add a CNAME record for their domain and forward it to your domain, e.g. hosted.myservice.com (Google uses ghs.google.com for Google Apps).

  5. When a request comes in, do

    SELECT customerId FROM domains WHERE name=:requestDomain AND active=1
    

A better way may be to automatically offer your customers a domain in the format of <customername>.myservice.com, in addition to custom domains. This gives you two benefits:

  • Customers who don't wan't to use their own domain can still customize their login page, e.g. with a company logo.

  • For custom domains, you can ask your customer to forward them to <customername>.myservice.com instead of to a generic hosted.myservice.com.

    This enables you to horizontally partition customers among multiple servers without having to ask customers to change anything on their end. For example, you could give customers an option to choose whether they want their account hosted in EU or US. When they change it, just transfer their data and update <customername>.myservice.com. Their custom domain will work automatically.

To do this, you'd have to set up a wildcard DNS record for *.myservice.com (unless you also need the latter feature, in which case you'll have to manage individual records).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...