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

项目前端服务是apache,后端是spring微服务,现在要提供外网访问的功能,解决方案是采用花生壳的内网穿透功能,将花生壳的域名映射到前端的apache服务上,apache服务提供反向代理功能,将请求转发到后端服务。梳理一下整个流程入下:

图一.png

该流程的前提是:只使用一个花生壳域名和一个端口号。


2020.12.12 内网映射外网流程-一个端口.png

该流程分为两步:浏览器和apache交互,加载js等文件;浏览器和后端服务交互,访问动态数据。

  1. 浏览器请求js文件。浏览器优先加载前端的js脚本,通过访问花生壳域名,花生壳映射到内网的前端Apache服务,前端Apache服务给浏览器返回前端js文件

2.浏览器请求动态数据。js脚本加载完成后,可以访问页面,通过接口访问后台数据。但是,目前花生壳只映射了前端apache服务,没有映射后端服务,所以请求的ip和端口号,只能是花生壳的ip和端口号,然后花生壳再转发到apache,此刻,就需要apache能代理后端服务的功能。

概念巩固:
1.已知的是,内网是互通的,也就是说,apache能直接访问后端服务,他们在同一个内网中。
2.前后端交互,不是apache和后端服务通信,是浏览器通过http协议或其他协议,访问后端服务的通信。浏览器在公网,后端服务在内网,不互通,所以,浏览器只能先访问花生壳,再通过apache的反向代理,才能到后端服务。

针对以上流程,需要配置的地方

  1. 浏览器访问apache,不需要再额外配置ip,如图一的步骤5所示,浏览器的所有请求,会默认转发到当前访问的域名所在的服务,即转发到apache上。
  2. apache配置反向代理(在apache的配置文件中),使其能够代理后端服务,如图一中的步骤8,此时需要知道后端服务所在的ip和端口号,这样,外网访问后端接口就打通了。

两个ip:

  1. (apache反向代理后端服务的场景,这一步就不需要了;浏览器直接访问后端服务时,此步骤需要)js中配置后台服务所在的大网ip,以供浏览器解析js后获取后台接口地址。这个ip必须是大网地址,就是花生壳的域名和端口号,花生壳对外提供的大网ip。
  2. apache在配置中,配置反向代理所需的后台内网ip

文章所描述的流程,都是基于本文开头的前提是:只申请了一个大网ip和端口号。如果只有一个花生壳IP和两个端口号,即前后端分别映射一个花生壳端口号,此时,apache不需要代理后端服务,也就不需要知道与后端通信的内网IP。浏览器请求后台服务的动态数据,直接通过花生壳映射到后端服务,见下图,此时,只需在js中配置访问后端花生壳ip和后端映射ip,浏览器和后台服务直接通信,不需要apache作为桥梁。

2020.12.12 内网映射外网流程-两个端口.png

PS:花生壳配置的步骤

下载“花生壳5”的客户端
购买http协议,设置映射信息
实名认证,激活内网穿透

遗留问题:
  1. apache反向代理websocket链接如何配置
    见下一篇《apache配置反向代理+websocket》

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