nginx与ngrok不在同一台机器,如何用阿里云搭建自用的内网穿透服务?

众所周知,做微信公众号开发时,调试需要接收来自腾讯的服务器请求。因为我们的开发服务器都是在内网,所以腾讯的服务器请求无法通过互联网请求到自己的内网服务器上,所以就需要ngrok做一个内网穿透。

如果你刚好有自己的服务器,又想尝试自己折腾一番,可以参照以下资料做ngrok内网转发。我也是按照下面的资料自己搭建成功的,而且写的比较详细。强烈推荐。

参考资料:
https://blog.csdn.net/diaobatian/article/details/100890037
https://www.jianshu.com/p/f5c2a55e77bd

如果你没有自己的服务器,又需要做稳定的内网穿透服务,可以选择收费的。为了避免广告嫌疑,而且我也没用过,所以就不做推荐了。

我在搭建的过程中,受限于环境,因为自己比较喜欢折腾。我的nginx和ngrok不在同一个服务器,我也把它搭建成功了,之所以能搭建成功,首先得理解ngrok+nginx的数据传输过程。

image.png

黑色箭头表示请求、灰色箭头表示响应数据。

如果理解不了这个,那么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里面。这个办法测试过可以用,上面那办法是我想的,没有测试过,有兴趣的朋友可以测试一下。

文章记录就到这了,如果你在搭建过程中遇到什么问题,可以来这里联系我。我将在力所能及的范围内帮你解决。

在这里插入图片描述

发布了16 篇原创文章 · 获赞 7 · 访问量 6560

猜你喜欢

转载自blog.csdn.net/yb2020/article/details/104779923