8

我不知道该怎么说,所以我只是想解释我的理想场景,希望你能向我解释如何实现它...如何创建SaaS应用程序?

我正在用Zend创建一个应用程序将与DreamHost一起托管的框架。该应用程序将托管在其自己的域中(即example-app.com)。基本上,用户应该能够注册,获得他们自己的域名sampleuser.example-app.com或example-app.com/sampleuser指向的内容,看起来像他们自己的应用程序实例,这实际上是一个实例根据网址提供不同的内容。

最终,我希望我的用户能够创建自己的域名(例如foobar.com),指向sampleuser.example-app.com,以便foobar.com的访问者不会注意到该网站是真正从example-app.com提供服务。

我不知道如何做大部分的东西。这个过程如何工作?我需要用Apache做一些时髦的东西吗?或者可以使用DreamHost这样的第三方主机来完成吗?

更新:感谢您的建议!我已决定咬紧牙关,并升级我的托管计划以利用通配符子域名。这比我期待的便宜!我还了解到有关域名转销商计划,如opensrs.com,它们拥有自己的API。我认为使用这些API中的一个将成为我的域名注册问题的解决方案。

回答

10

子域名很容易。在托管环境中,在大多数情况下,apache配置为捕获主域下的所有子域调用。你只需要定义一个通配符的DNS,所以* .example-app.com被指向你的服务器的IP地址。那么你的网站应该会收到所有对这些子域名的调用。

其他领域很难。他们需要在Apache中配置为虚拟主机 - 请参阅http://httpd.apache.org/docs/1.3/vhosts/name-based.html - 这意味着它很难自动化,特别是在托管环境中 - 除非您的主机为您提供了一些API来做到这一点(容易和更可行的方案将是一个独特的IP分配给你的网站,那么你可以捕捉所有与你的Apache - 这可能是使用您的主机控制面板配置或开箱即用 - 然后只需将DNS服务器指向您的IP)。

然后,你已经配置你的Apache后,指向您网站上的所有必要的调用,您可以differnetiate每个子域应用程序分区这样:

  • 得到HTTP请求的主机头
  • 有包含您所服务的所有子域名的数据库表
  • 对该数据库表进行查找以确定实例或用户标识并稍后用于筛选数据/或选择数据库,如果您将使用“数据库每个应用程序实例“架构。

祝你好运:)

+1

我运行一个类似的架构的应用程序,并描述它的作品。如果使用共享主机,请务必检查是否可以设置通配符主机(* .domain.tld)。 – 2009-06-16 07:45:04