手上有海量的文件需要提供给公网用户,这些文件的访问并不需要高并发、高带宽,访问量不大,主要应对一些长尾的需求。看了下公有云的各种文件存储产品,感觉都比较贵。因此就想将这些文件都存储在本地,采用内外网穿透的方法,通过购买小管道公有云带宽提供给用户下载。
基于这样的需求,搜索引擎上提到最多的就是国内的花生壳和国外开源的ngrok,来构建内外网穿透的隧道。
[ngrok内外网穿透的原理图]
花生壳是收费服务,ngrok2也商业化了。基于开源的ngrok1来构建内外网穿透服务需要经过复杂的编译过程,且因为作者不再修补它的bug,导致服务并不稳定,往往用个两天,隧道就中断了。
[frp的原理图]
下载好编译后的版本即可直接使用。frp分为服务端模块(frps)和客户端模块(frpc)。分别将它们上传到外网的服务器和内网的服务器上。
frp提供了多种内外网穿透的使用示例。我的用法是在内网的服务器上架设nginx服务,将文件以web链接的形式映射到公网服务器的域名下。
服务端的配置文件frps.ini具体配置如下:
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
服务端的frp启动命令:
./frps -c ./frps.ini
客户端的配置文件frpc.ini具体配置如下:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
客户端的frp启动命令:
./frpc -c ./frpc.ini
frp无需自行编译,简单配置即可使用(安全性配置和更多示例配置,参见frp的readme),文件下载的速度在我的实验环境中仅限于公网带宽。至于稳定性,只要能好过ngrok1,可以考虑采用监控加重启服务的方式修复。:)
最后,感觉省下一笔巨款。
领取专属 10元无门槛券
私享最新 技术干货