宝塔lnmp+frp搭建内网穿透服务

发布于 2020-02-19  358 次阅读


之前做web开发的时候对于php网站通常采用的方式是之前介绍过的OpenVPN+SMB+WINDOWS映射网络驱动器 构建一套在本机windows环境中操作外网服务器文件,然后用vscode进行开发的方式,然后结合.../etc/hosts文件里本机域名切换的方式搞2套一样的环境(本机宝塔和远端服务器宝塔2套),加上git来做同步变更。

开发和发布环境搭建看这一篇:https://www.fancybit.top/post/11.html

用vscode+xdebug断点调试服务器上的php网站:https://www.fancybit.top/post/63.html

不过实际应用几次以后 有些需要对接的webapi,比如qq 微信开放平台以及支付宝 微信支付接口之类的时候就会遇到麻烦,因为需要服务提供方进行一些推送,而他们只能推送到外网IP,而我上述的方法只能在服务端来进行操作,会受限开发机到服务器的网络延迟有些麻烦。所以为了开发调试方便,很多人都会用NAT内网穿透技术,比如花生壳,ngrok,natapp之类。花生壳很早就有但是实测非常不稳定,即使付费的VIP用户也经常掉线,连不上。ngrok和natapp都已经进入商业化,想方便使用的话只能在国内一些搭建好的平台付费另外租用带宽流量。

这里是FRP的简单入门使用:https://blog.csdn.net/u013144287/article/details/78589643

frp目前还是开源免费的,在自己的服务器上搭建一套并不困难。但是如果生产服务器上使用frp和宝塔面板就会遇到80 443端口冲突的问题。这里就使用如下方法,宝塔占80 443 然后用需要转发的域名建立网站,申请let's encrypt SSL证书,然后打开反向代理,把数据转给 frp服务端注册监听的端口,这里也就是9988。服务器配置文件这么写:

[common]
bind_port = 7000
server_addr = 0.0.0.0
server_port = 7000
vhost_http_port = 9988

注意这里的vhost_http_port是外网机的端口 不能是80 因为会和宝塔冲突 这里用9988 然后宝塔在80端口收到数据 根据收到的请求域名分发给这个9988端口,然后frp通过已建立的连接发给开发机客户端。

然后是内网开发机,frp客户端配置文件这么写:

[common]
server_addr = fans.fancybit.top
server_port = 7000

[test.fans]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = test.fans.fancybit.top

local_port就是开发机上要接受数据的端口,这里使用80,因为frp和开发机之间的连接使用80端口就够了,内网机申请ssl证书比较麻烦,前面最终用户访问域名时候使用https连接你的公网服务器使用ssl就够了。但是要注意创建公网服务器反向代理的时候需要先在宝塔网站设置SSL页面里申请好证书再开反向代理,否则会拒绝你的操作。可以简单的理解为最终用户连接到你的公网服务器走的ssl加密通道,而公网服务器到开发机是不用ssl加密的。如果这方面也有安全漏洞的话,欢迎朋友来指正补充说明一下。

宝塔lnmp+frp搭建内网穿透服务  frp 内网穿透 webapi 微信开放平台 QQ开放平台 lnmp 宝塔 第1张 

 宝塔lnmp+frp搭建内网穿透服务  frp 内网穿透 webapi 微信开放平台 QQ开放平台 lnmp 宝塔 第2张

最后在开发机的80端口上就可以创建任意http服务器接收处理数据了。

当然你也可以在宝塔上也添加一个相同域名的反向代理网站 让本地开发机上多个网站也可以共用同一个80端口 用不同域名分发。

更多的FRP常用功能可以参考这里:https://sspai.com/post/52523

比较重要的也就是加一个 token处理一下安全问题了,避免别人在你开发机上frp客户端关闭的时候冒充你。



点击数:121


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。