FRP 的子域名代理可以让多个内网 HTTP 服务通过不同子域名访问,而不必为每个服务单独记忆公网端口。配置前提是:拥有可用域名、DNS 指向 FRP 服务端,并且服务端 HTTP 虚拟主机端口可从公网访问。

服务端配置

在 frps.toml 中设置根域名和 HTTP 虚拟主机端口:

bindPort = 7000
subDomainHost = "example.com"
vhostHTTPPort = 80

在 DNS 服务商处配置 *.example.com 指向云服务器公网 IP(或按实际需求逐个配置子域名)。同时在云服务器防火墙和安全组中开放对应端口。

客户端配置

在 frpc.toml 中声明 HTTP 代理和子域名:

serverAddr = "your_server_ip"
serverPort = 7000
auth.method = "token"
auth.token = "replace-with-a-random-token"

[[proxies]]
name = "example-web"
type = "http"
localIP = "127.0.0.1"
localPort = 8000
subdomain = "app"

访问 http://app.example.com 时,FRP 会将请求转发到客户端机器的 127.0.0.1:8000。多个服务可以使用不同的 subdomain 值。

注意事项

  • subDomainHost 必须与客户端生成的域名后缀一致。
  • vhostHTTPPort 是 FRP 服务端接收 HTTP 虚拟主机流量的端口;防火墙和 DNS 必须正确配置。
  • HTTPS 需要额外配置 HTTPS 虚拟主机端口或由反向代理负责 TLS 终止。
  • FRP 版本之间的配置格式和字段可能变化,部署前请核对对应版本文档。