我们正在从一个单一的站点迁移到一个相当标准的前端/后端体系结构,并且我们正在逐步进行。因此,NGINX conf中的路由非常复杂。当我们将新服务从旧系统迁移到新系统时,我们需要重定向路由,但是鉴于我们有成千上万个生成的url,这并不总是容易推论的。
以房间和登陆页面为例(但是我们有很多这样的冲突)
nginx-frontend.conf
# landing pages - to (eg) match /meeting-rooms/paris-2e-arrondissment
location ~* "^/([\p{L}\p{N}-]+)/([\p{L}\p{L}-]+)/?$" {
proxy_pass http://new:3000;
}
# rooms - to (eg) match /rooms/12345
location ~* "^/rooms/([\p{N}]+)/?$" {
proxy_pass http://old:3000;
}
老鹰眼会注意到,第一条路线(着陆页)也与/rooms/12345
相匹配,这是意外的并会导致错误。捕获旧版CSS(/css/bobbins.js
)和其他各种各样的东西也有类似的问题。
新旧服务然后在内部执行自己的路由以生成正确的数据。在旧服务器上,我们还有各种各样的遗留路由,这使得关闭其相应的路由同样危险/令人沮丧。
我想做的是列出带有预期服务的路由列表,并将其作为某种测试编写(不要在意哪种语言-python,node.js或php更可取,但我将采用一种新的语言。沿着这些行(伪代码)
[
{
test: ['/rooms/12345/', '/rooms/12346', ...],
expect: service.to.be(old)
},
{
test: ['/meeting-rooms/paris-2e-arrondissment/', '/meeting-rooms/london', ...],
expect: service.to.be(new)
}
]
然后,当我们更改路线时,可以确定我们没有偶然引入问题
我们正在使用docker,而且我知道我可能必须构建一个完整的解决方案,而不是期望获得快速的代码行。
是否有实现此目标的标准方法,或者可以使用的服务?否则,我们将不胜感激地收到潜在解决方案的概述。