如何将多个子域名映射到单个 MERN 多租户应用实例?

5

我正在使用 MERN stack 构建一个多租户应用程序。在学习最佳实践以识别租户时,我选择了子域方法。例如,浏览以下 URL:

  1. tenant1.mydomain.com,

  2. tenant2.mydomain.com

等等,URL 中的 tenant1/tenant2 部分被提取为租户标识以进一步验证用户并启动应用程序。正如在https://github.com/facebook/create-react-app/issues/2292#issuecomment-302894212 上所提到的那样,我设置了 .env 文件,因此 CRA(npm run start)开发服务器可以在映射域上提供服务,而不是在开发机器上默认的 localhost:3000

我认为这种方法只适用于单租户,由于在 .env 中只存在单个子域映射,但我不知道如何处理多个租户。整个过程对我来说都很新,并且我非常感激能够获得所有可能的帮助来实现多租户目标。

1个回答

0

有几种方法可以实现这个目的,我特别创建了一个子域名重定向到我的主应用程序域名。这对开发和生产都适用。

最初我像你一样将其保留在固定的开发状态,但现在我将其视为生产状态,这使得开发更加动态和真实。

在任何系统中,您都有HOST文件。

它们的路径通常为:

  • Windows 10:“C:\ Windows \ System32 \ drivers \ etc \ hosts”
  • Linux:“/ etc / hosts”
  • Mac OS X:“/ private / etc / hosts”

在HOST文件中,我将子域名指向本地IP或应用程序IP。类似于:

127.0.0.1 client1.myapp.com

127.0.0.1 client2.myapp.com

127.0.0.1 client3.myapp.com

在这种情况下它是本地的,但对于生产环境也可以工作,因此当我运行我的应用程序时,我不需要使用127.0.0.1或localhost,我可以使用其中一个域名,即使它们指向相同的IP地址,这样我就可以从应用程序内部获取客户端的域名,例如:
const domainName = window.location.hostname;

现在只需使用域名即可使多租户逻辑正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接