使用 frp 将本地 web 服务暴露到公网

2025/04/08 计算机网络

使用 frp 的前提条件是有公网IP的服务器,毕竟标题所讲的就是内网穿透。内网穿透,要么买服务,要么就自己搭,frp就是一款高性能的反向代理应用,专注于内网穿透,主打一个免安装,Go语言写的嘛,交叉静态编译就是香。

像微信以及一些服务,需要提供公网HTTP地址甚至必须是HTTPS服务才能申请或测试,频繁同步代码到服务器也不方便,而且如果是新的服务器还得搭环境,那还是做个内网穿透服务到本地比较舒服,非常适合个人做测试。

本文使用的是frp 0.61.2,下载即可使用,解压后只有以下文件:

frpc
frpc.toml
frps
frps.toml
LICENSE

用户只需要关注frps.tomlfrpc.toml,分别是服务端和客户端的配置。

服务端frps.tomlbindPort为穿透服务的端口,即frpsfrpc通信的端口,而vhostHTTPPortvhostHTTPSPort为服务器对外提供HTTPHTTPS服务的端口。

而客户端frpc.tomlserverAddrserverPort显然就是客户端和服务端通信的地址和端口,例如我们通过example.com8080端口为客户端提供穿透服务,则serverAddrexample.comserverPort8080;至于localIP="127.0.0.1"localPort=80customDomains=["example.com"]就是需要暴露到公网的本地服务地址和端口以及自定义域名。

HTTP 服务

服务端frps.toml配置:

bindPort=8080
vhostHTTPPort=8080

客户端frpc.toml配置:

serverAddr="example.com"
serverPort=8080

[[proxies]]
name="web"
type="http"
localIP="127.0.0.1"
localPort=80
customDomains=["example.com"]

HTTPS 服务

vhostHTTPSPort为服务器对外提供HTTPS服务的端口。

服务端frps.toml配置:

bindPort=8080
vhostHTTPSPort=443

客户端frpc.toml配置:

serverAddr="example.com"
serverPort=8080

[[proxies]]
name="web"
type="https"
customDomains=["example.com"]

[proxies.plugin]
type="https2http"
localAddr="127.0.0.1:80"

crtPath="./example.com_public.crt"
keyPath="./example.com.key"
hostHeaderRewrite="127.0.0.1"

关键说明:

  • [[proxies]]type="https"表示该转发是https类型;
  • [proxies.plugin]type="https2http"frpHTTP服务转换为HTTPS服务的扩展;
  • [proxies.plugin]localAddr为本地HTTPS服务地址;
  • [proxies.plugin]keyPathTLS密钥文件路径;
  • [proxies.plugin]crtPathTLS证书文件路径;
  • [proxies.plugin]hostHeaderRewrite改写请求报文的Host

Search

    Table of Contents