0%

2021-06-21 使用 frp 实现 https 内网穿透

使用 frp 实现 https 内网穿透

参考:

frp 官方文档 https://gofrp.org/docs/

frp下反向代理实现https协议 https://www.cnblogs.com/shook/p/12790532.html

使用 Systemd 设置 frp 开机启动 https://notfound.cn/posts/systemd-frp/

关于内网穿透的原理,本质上就是将服务器的请求转发到本地,所以需要一个工具来实现。

内网穿透的工具有很多,由于笔者有自己的服务器和域名,所以选择自建。

在这里选择 frp 作为内网穿透工具。

具体的安装及部署参考官方文档即可,在这里要说明的是, frp 提供了多个平台的二进制可执行包,在下载的时候注意下平台问题。

这里额外提一嘴,如果需要实现开机自启,则可参考官方已经编写好的 systemd 文件,例如要执行 frps ,则将 frps.service 文件扔到 /lib/systemd/system/ 目录下即可。同时将 frps 二进制文件扔到 /usr/bin/ 下,配置文件 frps.ini 扔到 /etc/frp/ 下。如果放在别的目录下,则修改 frps.service 文件中的 ExecStart=/usr/bin/frps -c /etc/frp/frps.ini 一行即可

最后即可使用 systemctl status frps 指令来测试是否成功。

由于我们要部署的是通过域名来访问本地(内网)的 web 服务,因此参考官方文档中 通过自定义域名访问内网的 Web 服务 可以很简单的实现对 http 请求的转发。

但官方只说明了对 http 请求的转发,作为一个基本上不使用 http 协议来搭建服务的人来说,不使用 https 来访问线上请求是有点难受的。而且要想通过域名访问,则必然需要使用 Nginx 或其他工具进行反向代理。

在这里,由于对官方文档的误解,我原先以为 Nginx 要转发到的端口是 https 端口,但实际上是要转发到 http 端口。

1
2
3
4
5
6
# frps.ini
[common]
bind_port=7000 #服务端端口
vhost_http_port = 7080 #客户端http映射的端口,Nginx 中应该配置请求转发到本端口。
vhost_https_port = 7433 #客户端https映射的端口
token = 123456 #由于内网穿透可能会被恶意利用,所以建议设置一个 token 来防止被恶意使用

最终的请求处理逻辑如下:

访问域名 -> 请求服务器 -> Nginx 转到 frp -> frp 转发到本地服务器 -> 本地处理完逻辑响应请求

本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/cb31575b.html
版权声明:转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!