【问题标题】:How to serve 2 different versions of websites under the same domain?如何在同一个域下提供 2 个不同版本的网站?
【发布时间】:2019-12-17 08:00:07
【问题描述】:

我已经开始着手一个需要重写的项目。所以,与其做一个大爆炸式的发布 我们决定使用Strangler Pattern,这意味着以下

  • 当前应用程序(下面的堆栈详细信息)将在现有域https://app.com 下按原样运行
  • 现有(和新)功能将在新堆栈中重写(详情如下)并与现有应用并行部署(在同一域 https://app.com 下)

要求是

当前应用的栈和架构是

  • 带有硬编码数据的 HTML 文件
  • CSS 文件
  • 字体文件
  • PDF
  • 图片
  • 闪存文件 除其他事项外。

您的应用程序是静态的。它没有数据库。它调用其他 3rd 方 API,但没有自己的数据库(文件和图像除外)

它位于一个目录下,并通过在专用服务器上运行 Web 服务器 (Apache) 来提供服务。

新重写的堆栈和架构将

  • 使用 React 或 Gatsby
  • 生成静态文件的标准构建系统
  • 数据(PDF、图片)托管在其他地方
  • Flash 文件(直到我们找到更好的方法)

鉴于这些要求,我想到了使用某种负载平衡器(例如 Nginx)的应用程序的 2 个版本,并使用代理提供 URL 模式。

例如

现在,考虑到这种情况,我想问以下问题

  • 这种方法看起来合理吗?有没有更好的方法来处理这种情况?
  • 如何实现这样一个基于反向代理的系统(考虑 Nginx)? (或者如果有更好的方法)

我很想听听可以帮助我学习和实施的想法和任何资源/书籍/github。

提前非常感谢!

【问题讨论】:

  • 您的应用中是否有任何后端,或者它完全是静态的?
  • @georg,它是完全静态的。它使用一些外部 3rd 方 API,但此应用程序不存在数据库。谢谢你的好问题!我会更新上面的细节
  • 您希望何时知道您看到的图像是新应用还是旧应用? nginx 什么时候应该代理到其中一个?
  • 好问题,我想我错过了这部分。图像是静态的,因此新应用会将它们复制到自己的项目文件夹中,或从 S3(或其变体)提供。我认为只要它是相同的图像(因为它会由旧应用程序提供),一切看起来都很好!我错过了什么吗?
  • 假设您在 abc.html 有一个旧功能。然后你将它迁移到一个新的。我们建议您创建具有相同扩展名的代码,但将其放在不同的 url 下。就像app.com/abc.html 一样,迁移后它将是app.com/v2/abc.html。你代码中的所有链接现在都应该指向 v2。

标签: javascript html reactjs nginx architecture


【解决方案1】:

我建议创建已迁移到新功能的 v2 页面。并且该页面的所有链接都应更新为指向 v2。

如果有人为旧链接添加了书签,那么这些页面可以简单地将用户重定向到 v2 页面,只需使用 JS 重定向它们 - window.location(url_of_target_page);

【讨论】:

  • 这个答案不是假设新版本的代码存在于同一个旧代码库中吗?我们仍然需要一个负载均衡器来代理请求,对吧?因为有 2 个应用在同一个域下运行
  • 实际上这种方法更好,因为您不必维护两个代码库。一个代码库将有助于构建过程和部署部分。而且由于应用程序相同,因此您当前的负载均衡器应该可以正常工作。
  • 但我们不想在当前代码库中继续开发。请阅读问题了解更多详情
猜你喜欢
  • 2018-09-06
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多