读者可以先参考我另外两篇对本地网络如何映射到外网的文章
之所以会有这篇文章的出现是因为我最近想调试一下微信公众号,然后我把本地写好的服务用ngrok映射了出去,并在本地跑了8081端口的一个项目作为接收
然后我在浏览器输入我映射的域名进行访问 http://zxc1115.free.idcfengye.com/, 发现是正常的
虽然报错了,只是因为我的spring-boot项目没有对应的请求,不过说明服务已经跑起来了
然后我到我自己的微信公众号后台配置一下开发者模式下的开发配置,并输入我的域名和校验信息等,这里就不说微信公众号是怎么接入的了,可以自行百度或者参考 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
但是一直报参数错误这个错误信息
一度之间还以为是自己代码或者操作步骤的问题,后来无意中得知是因为微信把 ngrok,natapp,花生壳这些映射外网工具的域名给禁用了
然后刚开始是想找另外没被禁用的映射工具,后来发现了一篇文章,,说可以通过nginx反向代理到ngrok,然后ngrok再代理到我的本地,突然觉得真奇妙,同时也感叹自己不好好学习!所以一定要好好学习,当然你必须有一台自己的外网服务器,我刚好有一台,所以才可以进行接下来的操作
无非就是到能外网的nginx服务器上配置一下文件内容,ngrok的配置请自行百度,我只给出我的配置
upstream myTomact {
server zxc1115.free.idcfengye.com;
}
location / {
proxy_pass http://myTomact;
}
然后以为这样就好了,但是一访问,发现。。。。
一时间傻眼了,不是配置了么,怎么转发不出去,然后怀疑是不是没给出去,又ping了一下域名,发现是可以ping通的
然后又是百度了上面那几个字一下
Tunnel mytomact not found
其实百度也没怎么说,然后猜测是不是因为upstream的问题,因为上面的mytomcat刚好是我的upstream的名字,随后就把配置文件改成了
#让他直接向 zxc1115.free.idcfengye.com 转发
location / {
proxy_pass http://zxc1115.free.idcfengye.com;
}
然后弄完以后有重启了Nginx, 发现这样就可以了
是不是很熟悉,又回到了当时的页面,233,这样就好了
我猜测是因为 nginx 用upstream 转发的时候又做了一些事情导致无法被nrgok映射到,因为我注册的名称时
http://zxc1115.free.idcfengye.com 但是通过nginx upstream 转发后变为那个 upstream 的名字了
用nginx 反向代理ngrok是受到这篇博客的启思
总而言之,我还是学习不够,一定要好好学习!!!!!
最后发一张正常跳转到本地的图片
到此就等于绕过了微信的限制,当然你要有个外网服务器才可以,不过当你想在本地调试的时候,这个就起了很好的作用了
特别是这样也方便了你到时服务器的变化,因为这样只需要改nginx的配置就行了,不需要再去改微信的
~~~完~~~