为什么使用子域来指定多租户Web应用程序中的租户?

时间:2011-02-13 22:02:57

标签: subdomain multi-tenant

问题

  1. 为什么有些多租户Web应用程序使用子域来指定租户而其他人不使用?
  2. 是否存在技术,隐私或安全原因?
  3. 是否依赖于用于开发Web应用程序的语言或框架?
  4. 只是风格或开发人员的选择?
  5. 使用子域指定租户的示例Web应用程序

    不使用子域来指定租户的示例Web应用程序

2 个答案:

答案 0 :(得分:15)

有几种方法可以在HTTP级别上确定租户:

  • 域 - 租户由整个Host标题
  • 决定
  • 子域 - Host标题的子域部分,
  • 基于路径 - 路径段,通常是前缀host.com/tenantId/...
  • 基于cookie - cookie值包含租户ID(好的框架加密这个!)
  • 基于用户 - 用户会话或服务器上的一些数据记录

以下是您的问题的答案:

    如果您想让用户感受到完全孤立的租赁,那么
  1. (子)域多租户是很好的。客户可能需要自定义欢迎和登录页面,单独的用户群等。另一方面,基于路径的多租户适用于未固定到单租户命名空间的用户。它主要被Facebook,GitHub等社交网络使用。

  2. (子)域可以为cookie提供更好的隔离和安全控制,跨域资源共享(CORS)。它使交叉租户CSRF或XSS更难。此外,如果您可以控制DNS或负载均衡器,则可以将租户分配给不同的IP(想想地理路由)或各种版本的应用程序(例如beta租户)。您可以为最重要的租户分配单独的应用实例或服务器。通过这种方式,您可以获得一种廉价的工具来控制单点故障和所有鸡蛋在一个篮子里的风险。

  3. 任何允许您访问HTTP标头(Host)的Web框架都具有子域功能。任何严肃的MVC Web框架都应该直接或通过插件为您提供子域作为操作参数。

  4. 这绝对是一个设计选择。如果您想知道最佳方式,请考虑您希望租户的隔离级别。如果您决定但是您会发现方法不对,那么您可以借助HTTP 301重定向迁移到另一个级别。

答案 1 :(得分:4)

  1. 见下文。
  2. Cookie最明显,第二个是您可以更改子域的DNS设置,但不能更改路径
  3. 没有
  4. 部分见上文。