简短回答:

简短回答:

我正在构建一个允许多租户的 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 设置选项,包括:

  • 您已经提到的两个:
    1. 单独的虚拟主机
    2. 一个 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但如果是,则没问题。

您的选择:

  • 完全交给客户:
    1. 向客户提供要使用的 IP 地址
    2. 告诉客户为其主机名创建指向该 IP 的 A 记录
    3. 可选择向客户提供创建 DNS 记录的方法。
    4. 优点:
      • 对你来说是最简单的,至少从前期来看是如此。
      • 不需要托管任何人的 DNS
    5. 缺点:
      • 顾客可能会难以遵循指示
      • 当/如果您重新编号并且有新的 IP 地址,则会出现大量的支持票 - 无论您提前多少警告。


  • 让客户使用您的 NS 记录:
    1. 告诉您的客户通过他们的注册商将其域名的名称服务器更改为您的,或者如果他们使用子域名,则使用 NS 记录将该子域名委托给您。
    2. 可选择向你的客户提供如何执行此操作的详细说明
    3. 确保您的注册过程自动在 DNS 中创建相关区域
    4. 可选择为您的客户提供一个界面,以便将其他记录添加到他们的区域,例如 MX 等,或者自动提供它们并托管您的客户的电子邮件......
    5. 优点:
      • 为您的客户提供最简单的方法。
      • 避免担心将来需要重新编号时会发生什么
      • 避免整个 CNAME 难题
    6. 缺点:
      • 您现在既是 DNS 托管商,又是应用程序托管商
      • 注册过程中的额外集成步骤


  • 仅允许客户使用子域名(可能包括 www)
    1. 让客户为该子域名创建 CNAME
    2. 可选择指导客户如何创建从裸域到子域的 HTTP 重定向。
    3. 优点:
      • 可能是最简单的方法。
      • 由于许多其他托管应用服务都采用这种方法,客户更有可能熟悉它,因此不太可能把它搞砸。
      • 与 NS 方法类似,避免重新编号期间出现问题
    4. 缺点:
      • 不允许客户将裸域名用于您的服务
    5. 我强烈推荐这种方法 - 唯一的原因是这是客户通常习惯的方法。您可能需要根据具体情况考虑允许使用其他方法。

相关内容