通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网。
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
https://github.com/fatedier/frp
https://gofrp.org/docs/setup/
为什么使用 frp?
在开发支付相关业务的时候,因为付款后必须有公网的回调地址。
所以完整流程的测试必须在拥有公网IP的服务器上测试...
开发微信公众号网页时,微信认证的授权回调必须有公网地址。
所以完整流程的测试必须在拥有公网IP的服务器上测试...
提供给第三方接口时,需要部署在拥有公网IP的服务器上测试...
重复着上传代码、重启、报错、修改,上传、重启、报错这个无限循环。
说实话,我蛮习惯这个步骤的,测试环境我也从来不打包,都是零散的class文件
替换还是很快的。
反正Java的热编译难用的要死。
唯一的不足就是羸弱的云服务器拖拖拉拉的启动往往要好几十秒,往往盯着Log,看着启动日志一行行冒出来发呆。
终于在一次次重复操作中,我厌烦了,懒惰占领了高地,抽点时间来找找更方便的方式吧!
用frp实现公网访问内网服务
下载frp软件
frps
部署在公网服务器上的frp server端
部署&测试
我用的frp_0.38.0_linux_amd64版本
编辑frps.ini配置文件
服务端这里主要在配置文件中增加:
bind_port 服务的端口号
为了方便使用,最好也配置上Dashboard,frp提供了web端的控制访问
dashboard_port web端的访问端口号
dashboard_user 配置一个用户名
dashboard_pwd 配置一个密码
服务器放行所需要的端口
测试启动
./frps -c frps.ini
访问服务器dashboard_port端口号,登录
后台启动(启动后关闭shh)
nohup ./frpc -c ./frpc.ini >> ./frpc.log 2>&1
frpc
部署在内网服务器上的frp client端
TCP穿透
[common] 中配置服务端的地址端口
[这里是内网服务的名字自定义]
type = tcp
local_ip 内网服务的ip
local_port 内网服务的端口
remote_port 服务端暴露出的端口
测试启动
./frpc -c frpc.ini
查看服务端的Dashboard中是否上线 (看日志也行)
后台启动
nohup ./frps -c ./frps.ini >> ./frps.log 2>&1
域名配置?
这里我直接用Nginx反向代理了,frp也提供了域名配置功能,但是我想都走80和443端口,很多服务都之前依赖的Nginx..
配置开机自启动
客户端的机器经常需要重启啊之类的,这里主要思路是加个开机执行的脚本就好,但是查阅到别人的脚本都是有点问题的,又自己折腾了一番。
我是CentOS7环境!
- cd /etc/rc.d/init.d
- cd vim frps.sh
#!/bin/bash
# chkconfig: 2345 10 90
# description: frpc
rm -rf /root/frp/frpc.log
/root/frp/frpc -c /root/frp/frpc.ini >> /root/frp/frpc.log 2>&1
这个脚本我执行的时候有点问题,frpc启动的时候网络连接失败,所以命令就执行失败了。
(我猜可能是网络还没启动的原因,这个脚本执行太早,本地网络环境比较复杂。)
于是我加了两行
#!/bin/bash
# chkconfig: 2345 10 90
# description: frpc
function waitPort() {
while ! nc -vz $1 $2; do
sleep 2
done
}
waitPort www.baidu.com 80
rm -rf /root/frp/frpc.log
/root/frp/frpc -c /root/frp/frpc.ini >> /root/frp/frpc.log 2>&1
先用nc去看百度是否是通的,通了再执行...
netcat 安装 yum -y install netcat
补充:
sh设置执行权限
chmod +x frpc.sh
添加脚本到开机自动启动项目中
chkconfig --add frpc.sh
chkconfig frpc.sh on
本文由 考拉 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Mar 15,2022