内网的服务让外网能访问

首先说:没有代码,没有代码,没有代码!只说思路!

有时候,我们的服务必须外网才能让访问,例如,支付中的回调,回调的接口是实现配置在支付平台的!例如微信支付,我们在微信平台上配置了我们的回调,我们支付后,请求我们的接口地址,所以这个接口只能外外网的,微信是无法访问我们内网的!这样,如果我们要调试,必须把代码发到测试环境或者正式环境(都是外网能访问的地方),这样我们调试有很多麻烦!

上边啰嗦说了下,要外网能访问内网的原因,咱看怎么做呢!这里就可以用代理的方式解决!

说第一种:就是外网的服务器(被支付平台回调的平台)和内网机器是互通的,这种方式很简单,就是通过nginx配置代理,直接转到你内网的机器,百度搜索nginx proxy! 这是代理的一种,还有一个种是不互通,但你网络有公网ip(公司网络,不是线上服务器,一般无法访问80端口),也可以通过你网络的路由器转发到你机器的ip上–同时,你线上服务器转发请求到你的公网ip!这里说的这块是最简单的方式!

第二种http方式:这种方式是单项的,只能处理微信回调这种情况(可以不需要回应的),自己写程序的方式!一般外网无法访问内网的机器,但内网的机器可以访问外网的机器!所以这里需要一个服务端和客户端的概念,服务端是外网机器,客端是你内网机器!这里http的方式比较简单,方式是内网服务器一直请求外网服务器,外网服务器介绍到的请求放到队列中(可以用redis),内网服务器就一直循环访问外网服务器的提供redis队列中请求,内网拿到数据后,在内网再请求,就变相实现请求的转发啦,http的方式开发简单,但效率比较低!对于测试来说无所谓!另外无法会请求进行回应!当然,如果要实现回应,通过http的方式,这里也能实现,但效率非常低,推荐第三种,tcp双向交互!

第三种方式tcp的方式,这种方式很高效,就是内网穿透,当然有工具实现!也可以自己实现,就是用tcp建立远程长连接,内网作为客户端连接远程服务器(作为服务端),外网服务器有ip,所以内网可以访问外网,建立连接后,服务端接收到请求直接通过tcp长连接推送请求到内网的服务器,内网接收到请求后,直接在本地放松请求,然后把请求处理后的结果返回给服务端,形成链路。从而实现内外网的穿透!