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

Nav*_*enS 5 subdomain web-applications multi-tenant reactjs react-router

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

  1. tenant1.mydomain.com,

  2. tenant2.mydomain.com

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

我认为由于 .env 中的单个子域映射,该方法仅适用于单个租户,但不知道是否以及如何处理多个租户。这一切对我来说都是新的,我感谢我能够获得的所有可能的帮助来实现多租户目标。

Dhe*_*ean 0

有几种方法可以做到这一点,我特别创建了子域到我的主应用程序域的重定向。这对于开发和生产都有效。

\n
\n

最初我像您一样将其保留在固定开发中,但现在我这样做\n如果它在生产中,它会使开发更加动态和\n真实。

\n
\n

在任何系统上都有 HOST 文件。

\n

他们的路径通常是:

\n
    \n
  • Windows 10:\xe2\x80\x9cC:\\Windows\\System32\\drivers\\etc\\hosts\xe2\x80\x9d
  • \n
  • Linux:\xe2\x80\x9c /etc/hosts\xe2\x80\x9d
  • \n
  • Mac OS X:\xe2\x80\x9c/private/etc/hosts\xe2\x80\x9d
  • \n
\n

在 HOST 文件中,我将子域指向我的本地 ip 或应用程序 ip。就像是:

\n

127.0.0.1 client1.myapp.com

\n

127.0.0.1 client2.myapp.com

\n

127.0.0.1 client3.myapp.com

\n

在这种情况下,它是本地的,但它适用于生产,因此当我运行我的应用程序时,我不需要使用 127.0.0.1 或 localhost,我可以使用这些域之一,即使它们指向相同的域IP,这样我就可以从应用程序内部的客户端获取域,例如:

\n
const domainName = window.location.hostname;\n
Run Code Online (Sandbox Code Playgroud)\n

现在只需使用域即可使多租户逻辑发挥作用。

\n