(新)内网web服务映射公网的流程:花生壳+apache+后端服务

要解决的问题

apache+spring系统,如何提供外网访问的功能。

背景

本需求的来源是基于以下两点:一是为了解决W系统 APP端通过一个iP配置,同时访问W系统的B端后端接口和前端页面;二是对外提供大网访问W系统的能力。

现有系统

现有的W系统,前端服务采用的是apache,后端服务是spring cloud微服务。按照现有的配置,系统只能部署在内网上,并且前后端可以独立部署,不互相绑定。前后端交互时,直接访问,无须经过反向代理。如果有外部第三方服务,想要访问前端页面和后端接口,则必须分别调用前后端的接口,访问两个地址。如下图所示,浏览器,apache和后端网关,可以分别在三个不同的机器上。(也可以在一个机器上)

image.png

内网穿透方案

实现的思路是,借助花生壳的内网穿透功能,将花生壳生成的域名映射到内网的前端的apache服务上,apache服务额外提供反向代理功能,将接口请求转发到后端服务。内网穿透后,用户在外网的浏览器上,通过域名访问部署在内网的系统。当然,如果内网的机子能上网,也是可以通过域名访问系统的。

此时,系统在部署时,需要增加花生壳和反向代理功能,如下图所示:


image.png

apache反向代理的目的是,将从浏览器过来的动态数据的请求,转发到后端的网关上。apache不仅是前端服务的容器,同时也兼职了反向代理的作用。

这种部署方式,从浏览器端看,所有的文件加载和动态数据加载,都是从apache上获取的;

而从apache内部看,请求实际上是分为两类的:一类是apache提供的,一类是经过apache代理后从后台服务获取的。但是,两类请求地址上的域名是一致的,想要让apache区分这两类请求,必须有一定的规则。该规则就是,浏览器如果访问动态数据(接口),则在域名后面紧跟一个标志字段如apiServer,完整请求如:http://abc.com/apiServer/****,如果访问静态资源文件,则不加该标志。这样,apache通过匹配字段apiServer,就能区分出哪些请求时要代理到后台网关上去。

以上方案在代码层面实施时,需要修改两处:
一处是如上文所述,在后台网关ip的配置文件中(文件名称:ipConfig.js),增加标志字段apiServer,如下所示:


image.png

另一处是apache要增加反向代理的功能,在apache的配置文件httpd-vhost.conf中修改如下:


image.png

整个流程配置中,涉及的IP有两个:
一个是apache的IP和端口号,
一个是后端网关的IP和端口号。

apache的IP和端口号,是在配置花生壳的域名映射时所需的。
后端网关的IP和端口号,是在配置apache的反向代理时所需的,配置了反向代理的地址,apache就知道将动态请求代理到哪个服务器上去。

更新部署框架图:


部署框架图.png

你可能感兴趣的:((新)内网web服务映射公网的流程:花生壳+apache+后端服务)