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