frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP 、 UDP 、 HTTP 、 HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
我在开发微信公众号时用到了,当我们调试公众号消息时,需要用到公网环境,如果没有内网穿透,微信公众号消息就无法送达到我们的服务,如果你没有公网服务器,我以前写过一篇文章,是使用 ngrok 调试微信公众号开发的。这次我们讲下,使用 frp 实现内网穿透服务。
我先讲下为何使用 frp?
- 客户端服务端通信支持 TCP 、 QUIC 、 KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
- 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP 、 SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
然后,我讲下我的现场环境,我有一台公网云服务器,这台服务器运行我的公众号服务,现在我要在本地开发公众号服务并进行调试。我需要借助服务器的公网环境。如果你没有公网云服务器,你想要一台公网云服务器,从下面的链接购买有优惠。
想在阿里云购买,请使用这个链接:
https://www.aliyun.com/minisite/goods?userCode=zrqh6alb
想在腾讯云购买,请使用这个链接:
https://curl.qcloud.com/XX6que5w
通过以上链接购买,有很大优惠。
现在,我讲下如何安装配置 frp 。
frp 采用 Golang 语言编写,支持跨平台,只需下载适合的二进制文件即可执行,无需额外依赖。可以在项目的 Release 中进行下载。我们需要将 frpc 复制到您的内网主机,将 frps 复制到您的拥有公网 IP 的服务器上。
我们以微信公众号开发环境为例来进行配置。
一、在你的本地内网主机,配置 frpc.toml 文件。
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "test_htts2http"
type = "https"
customDomains = ["test.yourdomain.com"]
[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:80"
# HTTPS 证书相关的配置
crtPath = "./server.crt"
keyPath = "./server.key"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"
注意:
1,HTTP SSL 证书可以使用阿里云、或腾讯云的免费 SSL 证书,可以使用 3 个月。
2,它还需要 https2http 插件,它可以将本地 HTTP 服务转换为 HTTPS 服务,以供外部访问。
二、在你的公网服务器上,配置 frps.toml 文件。
bindPort = 7000
vhostHTTPSPort = 443
注意:bindPort 是 frpc 客户端连接的端口,vhostHTTPSPort 是对外提供 HTTPS 服务的端口。您需要将服务器的防火墙放开 7000 和 443 端口。
三、启动服务
我们需要分别启动 frps 和 frpc,启动命令如下:
./frps -c ./frps.toml
./frpc -c ./frpc.toml
四、访问 HTTPS 服务
打开您的 Web 浏览器,访问 https://test.yourdomain.com 。就可以访问您的内网服务了。微信公众号开发则需将域名地址配置到公众号管理后台。然后本地就可以进行公众号开发调试了。
frp 除了可以支持处理 HTTP 服务外,还支持其它多种服务。我觉得其中不错的功能还有处理 SSH 服务,可以配置 frp 实现通过公网访问内网 SSH 服务,这个可以用在家里的小主机上,可实现远程访问内网服务器。我还使用 frp 进行过集成支付宝联调。 frp 还有一些其它应用场景,可能你会用到。想要了解更多的内容请查看 frp 项目地址:
https://github.com/fatedier/frp
《一个非常棒的内网穿透工具》留言数:0