答案 0 :(得分:15)
有几种方法可以在HTTP级别上确定租户:
Host
标题Host
标题的子域部分,host.com/tenantId/...
以下是您的问题的答案:
(子)域多租户是很好的。客户可能需要自定义欢迎和登录页面,单独的用户群等。另一方面,基于路径的多租户适用于未固定到单租户命名空间的用户。它主要被Facebook,GitHub等社交网络使用。
(子)域可以为cookie提供更好的隔离和安全控制,跨域资源共享(CORS)。它使交叉租户CSRF或XSS更难。此外,如果您可以控制DNS或负载均衡器,则可以将租户分配给不同的IP(想想地理路由)或各种版本的应用程序(例如beta租户)。您可以为最重要的租户分配单独的应用实例或服务器。通过这种方式,您可以获得一种廉价的工具来控制单点故障和所有鸡蛋在一个篮子里的风险。
任何允许您访问HTTP标头(Host
)的Web框架都具有子域功能。任何严肃的MVC Web框架都应该直接或通过插件为您提供子域作为操作参数。
这绝对是一个设计选择。如果您想知道最佳方式,请考虑您希望租户的隔离级别。如果您决定但是您会发现方法不对,那么您可以借助HTTP 301重定向迁移到另一个级别。
答案 1 :(得分:4)