HTTP 和 HTTPS 是 frp 中针对这两种协议额外提供了一些特殊能力。本质上目前这两种应用层协议底层协议都是 TCP。如果不需要用到相关的特殊功能,可以直接使用 TCP 类型的代理,更加简单方便。
通常情况下 frp 不会修改转发任何数据。但有一些后端服务会根据 HTTP 请求 Header 中的 Host 字段来展现不同的网站,例如 Nginx 的虚拟主机服务,启用 Host Header 的修改功能可以动态修改 HTTP 请求中的 Host 字段。需要注意的是,该功能仅限于 HTTP 类型的代理。原来 HTTP 请求中的 Host 字段 test.dusays.com
转发到后端服务时被替换为 dev.dusays.com
,frpc.ini 的配置如下:
1 | [web] |
对于参数配置中所有以 header_
开头的参数「支持同时配置多个」都会被添加到 HTTP 请求的 Header 中,根据如下配置,会在请求的 Header 中加上 X-From-Where: frp
。frpc.ini 的配置如下:
1 | [web] |
1 | [web] |
注意:由于所有客户端共用一个 frps 的 HTTP 服务端口,任何知道域名和 URL 的人都能访问到内网的服务,但是在某些场景下需要确保只有限定的用户才可以访问。frp 支持通过 Basic Auth 保护 Web 服务,使用户需要通过用户名和密码才能访问到服务。该功能目前仅限于 HTTP 类型的代理,需要在 frpc 的代理配置中添加用户名和密码设置。通过浏览器访问 http://test.dusays.com,需要输入配置的用户名和密码才可以访问。frpc.ini 的配置如上。
通过在 frps 配置文件中配置 subdomain_host
,就可以启用该特性。之后在 frpc 的 http
类型的代理中可以不配置 custom_domains
,仅需要配置一个 subdomain
参数。只需要将*.dusays.com
解析到 frps 所在服务器。之后用户可通过 subdomain
自行指定自己的 web 服务所需要使用的二级域名。frps.ini 的配置如下:
1 | [common] |
将泛域名*.dusays.com
解析到 frps 所在服务器的 IP 地址。frps 和 frpc 启动成功后,通过 test.dusays.com 就可访问到内网的 Web 服务。frpc.ini 的配置如下:
1 | [web] |
1 | [web01] |
注意:frp 支持根据请求的 URL 路径路由转发到不同后端服务。通过配置文件中的 locations
字段指定一个或者多个 Proxy 能够匹配的 URL 前缀。如指定 locations = /news
,则所有 URL 以/news
开头的请求都会转发到这个服务。按照上述的示例配置后,web.dusays.com
这个域名下所有以/news
以及/about
作为前缀的 URL 请求都会被转发到 web02
,其余的请求被转发到 web01
。frpc.ini 的配置如上。