公司开发环境下,外网访问到你的内网服务
一、背景
和第三方服务,比如微信、钉钉等做小程序、公众号和支付对接的时候,如何搭建一个可以让外网能够访问到的网络环境。这是我们经常会遇到的问题。
二、整体网络图
image.png比如内网有一个java服务,它需要暴露一个回调接口,让微信来调用。
你可以找到开发环境所在的网络外网出口IP,做好端口映射到Kong外网。
image.png
这里的外网Ip地址是122.225.172.10,申请到的外网端口是6108,它映射到192.168.7.32:80(kong的地址)。所以当你访问
curl -X POST http://122.225.172.10:6108/pay/api/wx/notify
#或者
curl -X POST http://pay-test.xxx.com/pay/api/wx/notify
#内网下,可以访问以下地址:
#注意不需要输入“/pay”
curl -X POST http://192.168.80.224:9029/api/wx/notify
#也可以访问kong网关,但是需要输入“/pay”
curl -X POST http://192.168.7.32/pay/api/wx/notify
而kong它会反向代理你的后端服务(192.168.80.224:9029)。
image.png
三、总结
image.png需要注意的是,同一个路由地址,如果其他路由已配置了"/",会容易导致你的路由地址屏蔽。
注意,上面这里的Path已配置了"/",其他相等的Hosts值的路由,注意就不能配置"/"了。
image.png目前存在的问题是,后端接口的映射都是OK的,但是前端页面就只能一个。是因为我们去掉了Path,前端的地址就在其他的路由地址找不到。
下面举例说明:
http://pay-test.xxx.com/pay,它会跳转到 http://192.168.80.224:9029。
首页的.html文件,需要引入css和js等文件,它的地址是相对路径,未上传到oss等云上,会出现地址404的问题。
所以地址:http://pay-test.xxx.com/css/main.css, 就会变成http://192.168.80.224:9029/css/main.css。
要求你必须配置path="/"。
换句话说,如果你“/pay”的路由下未配置,其他的路由配置了path="/",那么你的前端资源就无法被代理到http://192.168.80.224:9029/css/main.css。
解决办法: 前端把css和js、html等资源还是上传到OSS,然后在Kong的upstream中的target配置对应的地址。其实就是让你的前端资源不要采用相对路径,依赖uri就会出现上面的4040错误。