subdomain - 为什么在 Multi-Tenancy Web 应用程序中使用子域来指定租户?

标签 subdomain multi-tenant

问题

  1. 为什么某些 Multi-Tenancy Web 应用程序使用子域来指定租户,而其他应用程序则不然?
  2. 有技术、隐私或安全方面的原因吗?
  3. 它是否取决于用于开发 Web 应用程序的语言或框架?
  4. 这只是风格或开发人员选择的问题吗?

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

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

最佳答案

有多种方法可以确定 HTTP 级别的租户:

  • 域 - 租户由整个 Host header 确定
  • 子域 - Host header 的子域部分,
  • 基于路径 - 路径段,通常由前缀 host.com/tenantId/...
  • 基于 cookie - cookie 值包含租户 ID(良好的框架对此进行加密!)
  • 基于用户 - 用户 session 或服务器上的某些数据记录

以下是您问题的答案:

  1. 如果您想让用户感受到完全隔离的租户,那么(子)域 Multi-Tenancy 是很好的选择。客户可能需要自定义欢迎和登录页面、单独的用户群等。另一方面,基于路径的 Multi-Tenancy 对于不固定于单租户命名空间的用户来说是有好处的。它主要由 Facebook、GitHub 等社交网络使用。

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

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

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

关于subdomain - 为什么在 Multi-Tenancy Web 应用程序中使用子域来指定租户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987201/

相关文章:

php - 检测用户是否在子域上,然后使用 PHP 添加变量?

azure - Azure AD Multi-Tenancy SaaS 应用程序的租户特定主页 URL

asp.net - ASP.NET Web API 应用程序中的 Autofac Multi-Tenancy IoC 容器

angular - 如何在 Angular 2(路由器 3)中处理租户子域

java - 将 Springboot 从 2.1.0 迁移到 2.2.1 时出现 Mongo 错误

ruby-on-rails - 将多个子域指向同一个 heroku 应用程序

heroku - 子域到heroku子域

ssl - 一个域/子域的多个 ssl 证书

multi-tenant - 支持 Multi-Tenancy 的简单php框架