业务场景
有两个系统A、B,A、B两系统均有独立域名,但对外只想暴露A域名。
需要实现通过 A域名+B系统子路由 访问 系统B的子页面,图示如下。
image.png

浏览器访问一个页面,需要1、静态资源文件,需要2、发送请求获取服务端数据,那么如果需要实现在A域名下访问B页面,A系统至少需要分别实现1、2两部分的请求转发。
即:
1、将请求B系统静态资源文件的请求,转发到B系统前端
2、将请求B系统后端服务数据(api)转发到B系统后端。
image.png

对系统A (www.asystem.com),系统B(www.bsystem.com),想要实现到达B系统的请求经由A系统转发到B,首先B系统的请求要能被A系统所识别。

如果有两个相同子路由www.asystem.com/admin www.bsystem.com/admin 对应A、B两系统的页面,那A代理B肯定做不到。

所以要在子路由层面对A、B两系统做个区分,域名之后,子路由最前部,加个前缀(需要分别对A、B两系统前端进行改造)。
如:
www.asystem.com/a/admin
www.bsystem.com/b/admin

同理,对A、B两系统的请求,也要有所区分,我们分别添加前缀api/a、api/b (也是改造A、B两系统前端;如果前端同学nginx用的好,前端nginx写rewrite配置,后端可以不改,但这事儿即使前端可以做,也不应该麻烦前端做,否则前端nginx配置会写的很冗余,可读性差,不容易维护。api的改造工作后端要配合,即后端分别改为api/a前缀、api/b前缀,改个统一前缀对后端来说不麻烦)。

改造工作完成后,下一步,通过配置A的nginx来实现
1、访问www.asystem.com/b/ 等价于访问www.bsystem.com/b/
2、/api/b开头的请求转发到B系统的服务端

核心的nginx配置如下图
image.png

做到上面这两点,百里之行已过六成,剩下的是解决:
1、仔细处理登录问题;
2、实现A->B系统的第一次跳转;
3、想好未鉴权直接访问B系统,B系统的行为,实现它。

上面列出的123也需要前后端配合,要干的工作需要耐心,调试起来挺麻烦的,慢慢尝试吧同学们。

完结。

同步更新到自己的语雀
https://www.yuque.com/diracke...


DiracKeeko
125 声望2 粉丝