如何创建SaaS应用程序?

8
我不知道该怎么说,所以我会解释一下我的理想情况,希望你能告诉我如何实现它...
我正在使用Zend Framework创建一个应用程序,将在DreamHost上托管。该应用程序将托管在自己的域名下(即example-app.com)。基本上,用户应该能够注册,获得自己的域名sampleuser.example-app.com或example-app.com/sampleuser,指向似乎是他们自己的应用程序实例,实际上是一个单一实例根据URL提供不同内容。
最终,我希望我的用户能够创建自己的域名(例如foobar.com),指向sampleuser.example-app.com,使访问foobar.com的访问者看不出网站实际上是从example-app.com提供的。
我不知道如何完成大部分工作。这个过程是如何工作的?我需要在Apache中做一些奇怪的事情,还是可以使用像DreamHost这样的第三方主机?
更新:感谢您的建议!我决定咬紧牙关升级我的托管计划,以利用通配符子域名。比我预期的要便宜!我还发现了域名转售商计划,例如opensrs.com,它们有自己的API。我认为使用其中一个API将是解决我的域名注册问题的方法。
1个回答

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配置为将所有必要的调用指向您的网站之后,您可以通过以下方式区分每个子域中的应用程序分区:

  • 从HTTP请求中获取主机标头
  • 拥有包含您正在提供的所有子域名的数据库表
  • 在该数据库表中进行查找以确定实例或用户ID,并稍后用于过滤数据/或选择数据库,如果您使用“每个应用程序实例一个数据库”的模式。

祝你好运 :)


1
我运行了一个类似架构的应用程序,它按照描述的方式工作。请确保在使用共享主机时可以设置通配符主机(*.domain.tld)。 - David Snabel-Caunt
我正在使用共享主机,但不支持通配符子域。我可以升级我的帐户并申请通配符支持,但这似乎不值得。是否有一种不使用通配符的方法来实现呢?谢谢! - Andrew
如果您愿意将每个主机头添加到您的网站中(或者有自动化的方法-请检查主机是否提供API),那么是可能的。您的网站必须以某种方式响应所有这些地址的调用-通配符DNS(或为“任何域”情况分配的IP)将是最佳选择。如果您的主机没有提供这些选项,那么就要更换它。 - Michał Chaniewski
3
如果你认真想要开发这个项目,那就没有理由去节省托管成本。你可以花费大量时间来克服共享托管环境中受限的功能所带来的限制,或者你可以认识到这种方式永远无法满足你的需求,现在就立即转换托管方式。 - Sean McSomething
我必须同意Sean的看法,如果你想挑战自己。你可以购买一个入门级虚拟专用服务器,价格约为20英镑,并自行管理整个过程。 - David Snabel-Caunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接