实际上,我正在开发一个 SaaS 应用程序,我想为订阅者提供他们自己的子域来访问他们的信息(在代码中,我将提取子域的第一部分作为他们的帐户名),类似于 Basecamp 等的工作方式。例如,订阅者可能拥有 URL acme.myapp.com
。由于可能有数百个订阅者,我不能简单地为每个客户端添加不同的主机标头。
Apache 允许您指定通配符 (*),并将 acme.myapp.com 重定向到 myapp.com,在那里我可以执行我的逻辑以根据子域检索用户的帐户名。我不确定如何使用 IIS 自动执行此操作(我已经有一段时间没有为除单个网站之外的任何内容配置 IIS 了)。
另外,我需要做哪些特殊准备才能实现这一点?当我的应用程序准备就绪并正在寻找托管服务时,我是否需要主机提供任何特定的东西来限制我的选择?我还在考虑使用 Windows Azure 来利用云 - 如果我使用 Azure 作为托管平台,我还能做到这一点吗?
答案1
正如 Joe 所提到的,您会更多地使用 DNS 而不是 IIS 来执行此操作。
IIS 不支持 *.domain.com 通配符域。相反,您需要在 IIS 中创建一个没有主机标头的站点,这样它就会响应该 IP 上的所有请求,而这些请求不会被其他有主机标头的站点接收。然后,您需要创建通配符 DNS 条目以指向该站点的 IP,这样就大功告成了。
答案2
如果我理解正确的话,您可以使用 DNS 来执行此操作。假设 myapp.com 是您的域,那么在您的 myapp.com DNS 区域中,只需添加指向您网站 (www.myapp.com) 的 A 记录的 CNAME 记录 (acme)。这会将它们发送到您的主网站,您的代码将接管并将它们重定向到适当的应用程序。
您还可以使用 DNS 通配符记录 (*),它将捕获所有内容,例如 acme.myapp.com、joeschmoe.myapp.com 等。