configurationApache或AWS以支持Rails多租户应用程序的最佳方式是什么?允许每个客户拥有自己的域名?

我正在构build一个允许多租户的Rails 3 SaaS站点。

当客户注册时,他们把自己的域名,例如example.com. 我需要example.com指向我的SaaS应用程序并为其提供内容。

我的问题如下:

我是否需要为每个使用自己的域名的客户创build一个Apache虚拟主机?

有一个更简单的方法与CNAME的只是让客户指向我的服务器的IP地址,然后转发请求到我的应用程序通过一些捕获所有虚拟主机?

我能否为客户创buildCNAMElogging,以便他们不必进行任何设置?

这是否更适合amazon web services?

任何帮助或解释或更正我的理解dns将不胜感激。 我是一个开发人员,所以服务器操作的这一部分有点多云。

简答:

阿帕奇:

只需使用catchall /通配符虚拟主机。 使帐户configuration方式更容易。

DNS:

只允许子域名,并让您的客户创build一个与他们现有的DNS提供商的CNAME。

AWS:

使用AWS或不使用AWS将不会对答案产生影响。

长答案:

关于Apache vHost设置:

您有多种vhost设置选项,包括:

  • 你已经提到的两个:
    1. 个人鬼魂
    2. 一个catchall虚拟主机,并在应用程序级别上处理它
  • 许多其他人。 由LavaScornedOven链接到的Apache文档
    http://httpd.apache.org/docs/2.2/vhosts/mass.html )是一个很好的资源。 你应该怎么做才是真的超出了你的问题的范围,我会立即解释为什么。

你select什么types的vHost设置取决于你的前端应用程序和其他因素:

  • 新客户注册过程是否使用您开发的软件或jar装?
  • 如果前者,哪种方法在你的注册过程中最容易实现?
  • 如果是后者,它是否已经在注册时创build了虚拟主机? 如果是这样,请使用软件随附的任何软件。
  • 如果非客户将他的域名指向您的IP,您希望发生什么? 在使用任何一种“catchall”虚拟主机之前,请考虑这一点。
  • 最终,只有你可以确定哪种方法最适合你。

关于DNS设置:

首先,你应该避免的事情是:

  • 区域顶点处的CNAME。 即example.com不应该是CNAME。 如果www.example.com是可以的。

您的select:

  • 完全取决于客户:
    1. 提供给客户一个IP地址使用
    2. 告诉客户为指向该IP的主机名创buildAlogging
    3. 可选地为客户提供创buildDNSlogging的指导。
    4. 优点:
      • 对你来说最简单,至less是前期。
      • 不需要托pipe任何人的DNS
    5. 缺点:
      • 客户可能会遇到方向问题
      • 当/如果您重新编号,并且有新的IP地址,预计支持门票大量涌入 – 无论您给予多less预先警告。
  • 让客户使用您的NSlogging:
    1. 告诉您的客户将其域名服务器更改为注册商的域名服务器,或者如果他们使用子域名,则使用NSlogging将该子域名委派给您。
    2. 可选地为您的客户提供详细说明如何做到这一点
    3. 确保注册过程自动在DNS中创build相关区域
    4. 可select为您的客户提供一个界面,以将其他logging添加到他们的区域,如MX等,或自动提供他们和托pipe您的客户的电子邮件….
    5. 优点:
      • 最简单的方法为您的客户。
      • 如果将来需要重新编号,避免发生的后果
      • 避免整个CNAME难题
    6. 缺点:
      • 您现在已经成为DNS托pipe商以及应用托pipe商
      • 额外的整合步骤与您的注册过程
  • 只允许客户使用子域名(包括可能的www)
    1. 让客户为该子域创build一个CNAME
    2. (可选)指导客户如何创build从其裸露域到子域的HTTPredirect。
    3. 优点:
      • 可能是最简单的方法。
      • 因为许多其他托pipe的应用程序服务使用这种方法,客户更可能熟悉它,因此不太可能皇家搞砸了。
      • 像NS方法一样,避免在重新编号时出现问题
    4. 缺点:
      • 不允许客户在您的服务中使用裸露的域名
    5. 我强烈推荐这种方法 – 唯一的原因是客户通常习惯于这种方式。 您可能要考虑在个案基础上允许其他方法。