众所周知,做微信公众号开发时,调试需要接收来自腾讯的服务器请求。因为我们的开发服务器都是在内网,所以腾讯的服务器请求无法通过互联网请求到自己的内网服务器上,所以就需要ngrok做一个内网穿透。
如果你刚好有自己的服务器,又想尝试自己折腾一番,可以参照以下资料做ngrok内网转发。我也是按照下面的资料自己搭建成功的,而且写的比较详细。强烈推荐。
参考资料:
https://blog.youkuaiyun.com/diaobatian/article/details/100890037
https://www.jianshu.com/p/f5c2a55e77bd
如果你没有自己的服务器,又需要做稳定的内网穿透服务,可以选择收费的。为了避免广告嫌疑,而且我也没用过,所以就不做推荐了。
我在搭建的过程中,受限于环境,因为自己比较喜欢折腾。我的nginx和ngrok不在同一个服务器,我也把它搭建成功了,之所以能搭建成功,首先得理解ngrok+nginx的数据传输过程。
黑色箭头表示请求、灰色箭头表示响应数据。
如果理解不了这个,那么nginx+ngork分开两台服务器时,就会出错,无法实现。
ngrok是用go语言写的,所以需要云服务器安装go语言的环境。
按上面的资料安装完成后,启好ngrok服务后,我本机的客户端一直无法连上ngrok服务。
多次尝试后才知道,腾讯到nginx走的http请求,nginx到ngrok走还是http请求,而ngrok到本机,以及本机回传给ngrok。走的却不是http请求,不要问我为什么知道,因为我自己搭建的过程中测试,用nginx转发请求到ngrok的tunnelchannel结果是无法连通。
后来用了一个办法,将接收请求的域名和响应请的域名分开。怎么操作呢?
比如我现在的域名是example.com.
我响应请求的域名设置的是ngrok.example.com。
接收请求的域名是*.ngrok.example.com。
这块一定要区别开。因为我用ngrok.example.com:4443启动客户端时,会去找对应域名的ip,如果没分开当然好说,一旦分开后,如果这两个域名ip不一样,而你解析成一样了,那么将会带来灾难。
两个解决办法,一个就是将ngrok.example.com解析到ngrok的服务地址上。
另外一个办法就是将ngrok.example.com对应的ip写到自己的host里面。这个办法测试过可以用,上面那办法是我想的,没有测试过,有兴趣的朋友可以测试一下。
文章记录就到这了,如果你在搭建过程中遇到什么问题,可以来这里联系我。我将在力所能及的范围内帮你解决。