如何为saas软件提供cname前向支持
我有一个webapp,用户可以在其中创建自己的帐户并使用该服务。 现在,我想给他们一个自定义域设施,其中app.customer1web.com在设置自定义域后,使用userid customer1将mysevice.com指向myservice.com,因为看起来我的服务正在他的机器上运行。 许多服务,如blogger,wp.com,tumblr都提供此function。
我怎么做? 我正在使用java编写我的Web应用程序。 当请求进来时,如何将域名映射到用户ID?
当请求进来时,如何将域名映射到用户ID?
显然,您必须将信息存储在某个地方,最有可能存储在数据库中。
-
使用列添加数据库表
domains
:- 顾客ID
- 名称
- 有效(1或NULL)
- 挑战
为(名称,活动)添加唯一键以确保域名仅映射一次。
-
当客户尝试添加域时,添加一个active = NULL且challenge设置为随机字符串的行。
向客户显示随机字符串,并要求他们在网站上放置一个网页,或者用它创建虚拟DNS记录以validation域名所有权(Google Apps就是这样做的)。
您可以通过向管理联系人发送电子邮件或以其他方式validation所有权。
-
当客户说他按照您指示他们在步骤#2中执行的操作时,validation它并设置active = 1,challenge = NULL。
如果域以前对其他客户有效,请删除这些记录或设置active = 0。
-
要求客户为其域添加CNAME记录并将其转发到您的域,例如
hosted.myservice.com
(Google将ghs.google.com
用于Google Apps)。 -
请求进来时,请执行
SELECT customerId FROM domains WHERE name=:requestDomain AND active=1
除自定义
,更好的方法是自动为客户提供
格式的域。 这有两个好处:
-
不想使用自己域名的客户仍然可以自定义他们的登录页面,例如使用公司徽标。
-
对于自定义域,您可以要求您的客户将它们转发到
而不是通用的.myservice.com hosted.myservice.com
。这使您可以在多个服务器之间水平分区客户,而无需要求客户更改任何内容。 例如,您可以让客户选择是否希望他们的帐户在欧盟或美国托管。 当他们更改它时,只需传输他们的数据并更新
。 他们的自定义域将自动运行。.myservice.com
为此,您必须为*.myservice.com
设置通配符DNS记录(除非您还需要后一个function,在这种情况下,您必须管理单个记录)。
您可以使用的一种解决方案是为您的应用程序设置WildCard DNS记录 ,并让应用程序自己检查RequestURI以查看用户正在使用的主机名。
我知道这是一个非常模糊的答案,但听起来好像设置了WildCard记录,只需一个函数检查主机名是你最好的选择。 这样,您不必在每次客户注册时都设置DNS记录,并且您有更多时间自己做其他事情……比如为您的应用程序添加新function!
我不太确定我是否真的明白你想做什么,但我试着给你一个可能的解决方案(至少对你问题的Java部分)。
一种可能性是以每个请求由一个Servlet(web.xml)处理的方式设置应用程序服务器。 这个servlet可以找到请求url( HttpServletRequest.getRequestURI )并提取用户名。 然后,您了解用户,并可以将此信息用于您想要做的任何事情。
请注意,您想要做的事情涉及很多DNS内容! (至少就像我理解的那样。)