我有一个Web应用程序,用户可以创建帐户并使用服务。现在我想提供自定义域名功能,其中app.customer1web.com指向myservice.com并且具有userid customer1。一旦他设置了自定义域名,对于世界来说,它看起来像我的服务正在他的机器上运行。许多像博客作者、wp.com和tumblr这样的服务都提供了这个功能。
我该如何做到这一点? 我使用Java编写我的Web应用程序。 当请求到达时,如何将域名映射到userid?
SELECT customerId FROM domains WHERE name=:requestDomain AND active=1
更好的方法可能是自动为您的客户提供格式为<customername>.myservice.com
的域名,除了自定义域名。这样可以带来两个好处:<customername>.myservice.com
而不是一个通用的hosted.myservice.com
。<customername>.myservice.com
。他们的自定义域名将自动工作。*.myservice.com
设置通配符DNS记录(除非您还需要后面的功能,在这种情况下,您将不得不管理各个记录)。我不太确定我是否真正理解您想要做什么,但我会尝试为您提供可能的解决方案(至少针对您问题的Java部分)。
一种可能性是设置应用程序服务器,以便每个请求都由一个单独的Servlet(web.xml)处理。此Servlet可以了解有关请求URL(HttpServletRequest.getRequestURI)的信息并提取用户名。然后,您就知道了用户的信息,并可以将此信息用于您想要做的任何事情。
请注意,您想要做的事情涉及大量DNS内容!(至少在我理解的范围内。)
@jaka的回答解释得很清楚。此外,如果您正在使用ngnix作为负载均衡器,可以使用以下配置转发原始主机名。
proxy_set_header Host $host;