我正在构建一个允许多租户的 Rails 3 SaaS 站点。
当客户注册时,他们会输入自己的域名,例如,example.com.
我需要example.com
指向我的 SaaS 应用程序并为他们提供他们的内容。
我的问题如下:
我是否需要为每个使用其自己的域的客户创建一个 Apache vhost?
使用 CNAME 是否有更简单的方法,只需让客户指向我的服务器的 IP 地址,然后通过一些捕获所有虚拟主机将请求转发到我的应用程序?
我是否可以为客户创建 CNAME 记录,以便他们无需进行任何设置?
这个案例是否更适合亚马逊网络服务?
任何关于我对 dns 理解的帮助、解释或更正都将不胜感激。我是一名开发人员,因此对服务器操作部分有点模糊。
答案1
简短回答:
阿帕奇:
只需使用 catchall/wildcard vhost。使帐户配置更加容易。DNS:
仅允许子域,并让您的客户使用其现有的 DNS 提供商创建 CNAME。AWS:
是否使用 AWS 不会对当前问题的答案产生影响。长答案:
关于 Apache vHost 设置:
您有多种 vhost 设置选项,包括:
,- 您已经提到的两个:
- 单独的虚拟主机
- 一个 catchall vhost 并在应用程序级别进行处理
- 还有许多其他。LavaScornedOven 链接的 Apache 文档
(http://httpd.apache.org/docs/2.2/vhosts/mass.html)是一个很好的资源。你如何具体地应该这确实超出了你的问题的范围,我稍后会解释原因。
但是,您选择哪种类型的 vHost 设置取决于您的前端应用程序和其他因素:
- 新客户注册流程是使用您开发的软件还是其他预先设计好的程序?
- 如果是前者,那么哪种方法对你来说最简单在你的注册过程中实现什么?
- 如果是后者,是否已经提供了在注册时创建虚拟主机的功能?如果是,请使用软件自带的任何功能。
- 如果非客户将其域名指向您的 IP,您希望发生什么?在使用任何类型的“catchall”虚拟主机之前,请考虑这一点。
- 最终,只有您才能确定哪种方法最适合您。
关于DNS设置:
首先,你应该确实避免:
- 区域顶点的 CNAME。即,
example.com
不应是 CNAME。www.example.com
但如果是,则没问题。
您的选择:
- 完全交给客户:
- 向客户提供要使用的 IP 地址
- 告诉客户为其主机名创建指向该 IP 的 A 记录
- 可选择向客户提供创建 DNS 记录的方法。
- 优点:
- 对你来说是最简单的,至少从前期来看是如此。
- 不需要托管任何人的 DNS
- 缺点:
- 顾客可能会难以遵循指示
- 当/如果您重新编号并且有新的 IP 地址,则会出现大量的支持票 - 无论您提前多少警告。
- 让客户使用您的 NS 记录:
- 告诉您的客户通过他们的注册商将其域名的名称服务器更改为您的,或者如果他们使用子域名,则使用 NS 记录将该子域名委托给您。
- 可选择向你的客户提供如何执行此操作的详细说明
- 确保您的注册过程自动在 DNS 中创建相关区域
- 可选择为您的客户提供一个界面,以便将其他记录添加到他们的区域,例如 MX 等,或者自动提供它们并托管您的客户的电子邮件......
- 优点:
- 为您的客户提供最简单的方法。
- 避免担心将来需要重新编号时会发生什么
- 避免整个 CNAME 难题
- 缺点:
- 您现在既是 DNS 托管商,又是应用程序托管商
- 注册过程中的额外集成步骤
- 仅允许客户使用子域名(可能包括 www)
- 让客户为该子域名创建 CNAME
- 可选择指导客户如何创建从裸域到子域的 HTTP 重定向。
- 优点:
- 可能是最简单的方法。
- 由于许多其他托管应用服务都采用这种方法,客户更有可能熟悉它,因此不太可能把它搞砸。
- 与 NS 方法类似,避免重新编号期间出现问题
- 缺点:
- 不允许客户将裸域名用于您的服务
- 我强烈推荐这种方法 - 唯一的原因是这是客户通常习惯的方法。您可能需要根据具体情况考虑允许使用其他方法。