怎么使用gateway分离内外网访问接口

Blade 已结 1 924
奥特曼大怪兽
奥特曼大怪兽 2020-08-26 10:06

大佬们,请教一下。


诉求为:想要把后台管理的接口 和 面向前端用户访问接口 分离开,后台管理的接口只能内网访问,面向前端的接口则开放到公网访问。


请问一下,使用两个gateway网关,一个对内网、一个对公网。代码层面怎么实现比较好一些?


是把后台管理的接口 和 前端的接口分成两个不同的服务吗?


如果分成两个不同的服务,那该怎么注册到不同的Gateway呢





三、你正在使用的是什么产品,什么版本?在什么操作系统上?

2.6.0



1条回答
  •  smallchill
    smallchill (楼主)
    2020-08-26 11:23

    正常情况都是通过nginx或者网关层面来配置的,不过这个需要有一个前期规划。

    最简单的思路如下:

     1. 定好外网访问、内网访问的模块,开发的时候以一个统一的api前缀配置

     2. 部署阶段,nginx配置,只有外网访问的api前缀接口才可以正常访问

     3. 配置好之后,访问内网接口,nginx判断如果是从外网接入,就会直接返回错误了

     4. 只有当内网访问的时候,才会正常放行


    另外一种思路如下:

     1. 前期规划好api配置

     2. nginx部署两套域名,a域名对外,反向代理对外模块的api,b域名对内,反向代理对内模块的api

     3. 部署后外部系统只能访问到a域名,对内系统只能访问到b域名


    这么做的好处就是配置可以灵活多变,不需要改动后端业务代码,唯一需要注意的就是前期开发阶段,要规划好每个模块的api

    作者追问:2020-08-26 11:23

    您回复的第二个思路,目前我比较疑惑的点有:

    1、做两个gateway网关,分别通过Nginx反向代理到这两个网关上,然后两个网关去请求不同模块的api,是吧?

    2、两个不同的模块,在开发的时候,他们都会连接到相同的nacos吗?


    回答: 2020-08-26 11:23

     1. 不需要两个网关,全程只需要一个网关

     2. 可以把外网内网的服务都放到一个工程内,也可以分成N个

     3. 取决于controller的apikey,与其他的无关

     4. 比如外网模块我所有api前缀都配置成/web,那么nginx就配置a域名,反向代理到 http://xxx/web就行了

     5. 至于是否要都个gateway,多个服务注册,这些都是无所谓的,核心在于apikey的分配以及nginx的配置

    0 讨论(1)
提交回复