菜单

配置

相关源文件

本页面提供了 frp 中配置系统的全面概述。它解释了可用的配置格式、服务器 (frps) 和客户端 (frpc) 组件的设置,以及配置如何加载和处理。有关特定代理类型的信息,请参阅代理类型

配置文件格式

frp 支持多种配置文件格式,以匹配您的偏好和工作流程

从 v0.52.0 开始,frp 支持 TOML、YAML 和 JSON 格式。INI 格式已被弃用,将在未来的版本中删除。新功能仅在 TOML、YAML 或 JSON 格式中可用。

该项目为服务器和客户端组件提供了完整的示例配置文件

来源:README.md475-490

配置优先级

frp 的配置系统遵循客户端和服务器组件的分层结构

来源:pkg/config/v1/server.go24-100 pkg/config/v1/client.go25-78

服务器配置 (frps)

服务器配置定义了 frps(服务器组件)的行为方式,包括网络绑定、身份验证和资源限制。

核心设置

bindAddr = "0.0.0.0"    # Address to bind to
bindPort = 7000         # Port for client connections

这些基本设置控制 frps 监听来自 frpc(客户端)实例的传入连接的位置。

身份验证

frps 支持两种身份验证方法:token 和 OIDC(OpenID Connect)。

其他身份验证范围可以应用于心跳和新的工作连接

来源:conf/frps_full_example.toml96-115 pkg/config/v1/server.go125-150

传输配置

传输设置控制 frps 如何与客户端通信,包括协议选项、keepalive 设置和 TLS 配置。

来源:conf/frps_full_example.toml25-48 pkg/config/v1/server.go152-198

协议支持

frps 可以监听多种协议

来源:conf/frps_full_example.toml6-15 pkg/config/v1/server.go28-39

虚拟主机

对于 HTTP 和 HTTPS 代理,frps 支持虚拟主机路由

subDomainHost 设置允许使用子域名进行路由(例如,test.frps.com)。

来源:conf/frps_full_example.toml50-56 conf/frps_full_example.toml131-133 pkg/config/v1/server.go43-65

Web 服务器/仪表板

frps 提供了一个用于管理的 Web 仪表板

来源:conf/frps_full_example.toml67-80 pkg/config/v1/server.go72

端口限制

您可以限制代理可以使用哪些端口

来源:conf/frps_full_example.toml120-126 pkg/config/v1/server.go96

SSH 隧道网关

从 v0.53.0 开始,frps 支持 SSH 隧道网关,用于在不使用 frpc 的情况下建立代理

来源:conf/frps_full_example.toml146-152 pkg/config/v1/server.go201-210 doc/ssh_tunnel_gateway.md

完整的服务器配置

ServerConfig 结构体包含所有服务器端配置选项

来源:pkg/config/v1/server.go24-100 pkg/config/v1/server.go101-123

客户端配置 (frpc)

客户端配置定义了 frpc 如何连接到 frps 以及要暴露哪些服务。

核心设置

这些基本设置指定了要连接的 frps 服务器。

身份验证

frpc 支持与 frps 相同的身份验证方法

来源:pkg/config/v1/client.go175-193 README.md599-637

传输配置

传输设置控制 frpc 如何与 frps 通信

来源: pkg/config/v1/client.go94-173 README.md654-684

代理定义

客户端配置中最重要的部分是代理的定义,它指定了要暴露的本地服务

每个代理都有一个类型(tcp、udp、http、https、stcp、xtcp、sudp、tcpmux)和特定于类型的配置。

来源: conf/frpc.toml4-9 README.md142-168

访问者定义

对于 P2P 模式(stcp、xtcp、sudp),客户端使用访问者配置来连接到暴露的服务

来源: README.md407-469

完整的客户端配置

ClientConfig 结构体包含了所有客户端配置选项

来源: pkg/config/v1/client.go25-92 pkg/config/v1/client.go136-154

环境变量替换

frp 支持使用 Go 的标准格式在配置文件中引用环境变量

环境变量使用 .Envs 前缀访问。

来源: README.md491-516

包含额外的配置文件

您可以将配置拆分为多个文件,并在主配置文件中包含它们

这对于组织复杂的配置或动态生成配置部分很有用。

来源: README.md518-538 pkg/config/v1/client.go77

配置加载过程

frp 的配置加载过程遵循以下步骤

为客户端和服务器配置定义的 Complete() 方法会为未指定的选项设置默认值。

来源: pkg/config/v1/client.go80-92 pkg/config/v1/server.go101-123

配置建议

配置 frp 时,请考虑以下建议

  1. 使用 TOML、YAML 或 JSON:避免使用 INI 格式,因为它已被弃用。
  2. 启用身份验证:始终设置 token 或使用 OIDC 以防止未经授权的访问。
  3. 启用 TLS:使用 TLS 实现客户端和服务器之间的安全通信。
  4. 设置适当的超时:根据您的网络条件配置超时。
  5. 限制端口:在服务器上,限制客户端可以使用哪些端口。
  6. 启用 Prometheus:对于生产部署,启用 Prometheus 指标以进行监控。

来源: README.md475-490 conf/frps_full_example.toml43-48

旧版配置格式 (INI)

虽然 INI 格式已被弃用,但 frp 仍保持向后兼容。旧版配置处理实现在单独的包中

用于旧版配置处理的源文件

  • pkg/config/legacy/proxy.go:旧版代理配置
  • pkg/config/legacy/visitor.go:旧版访问者配置

来源: pkg/config/legacy/proxy.go pkg/config/legacy/visitor.go

最低必需配置

最低限度,您需要这些配置来运行 frp

服务器 (frps)

来源: conf/frps.toml

客户端 (frpc)

来源: conf/frpc.toml

默认值

如果未显式设置配置选项,frp 将使用以下默认值

组件设置默认值
服务器bindAddr"0.0.0.0"
服务器bindPort7000
服务器vhostHTTPTimeout60
服务器transport.tcpMuxtrue
服务器transport.maxPoolCount5
客户端serverAddr"0.0.0.0"
客户端serverPort7000
客户端loginFailExittrue
客户端transport.tcpMuxtrue
客户端transport.protocol"tcp"
客户端transport.poolCount1
客户端transport.tls.enabletrue

来源: pkg/config/v1/client.go80-92 pkg/config/v1/server.go101-123

此综合概述解释了如何配置 frps 和 frpc 组件,涵盖了可用选项,并提供了有效配置的示例和建议。