From 40313fcbc9120a8e8de95cb27f095ee107393afd Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 18 Oct 2023 18:55:24 +0800 Subject: [PATCH] update config format (#68) --- content/zh-cn/docs/Features/_index.md | 2 +- .../docs/Features/common/authentication.md | 61 +++++----- .../docs/Features/common/client-plugin.md | 103 +++-------------- content/zh-cn/docs/Features/common/client.md | 44 ++++--- .../zh-cn/docs/Features/common/configure.md | 96 ++++++++-------- .../docs/Features/common/load-balancer.md | 105 ++++++++--------- content/zh-cn/docs/Features/common/monitor.md | 14 +-- .../docs/Features/common/network/_index.md | 2 +- .../Features/common/network/network-tls.md | 57 ++++------ .../docs/Features/common/network/network.md | 107 +++++++++--------- content/zh-cn/docs/Features/common/range.md | 21 ---- content/zh-cn/docs/Features/common/realip.md | 17 +-- .../docs/Features/common/server-manage.md | 39 ++++--- .../docs/Features/common/server-plugin.md | 66 +++++------ content/zh-cn/docs/Features/common/ui.md | 50 ++++---- .../zh-cn/docs/Features/http-https/_index.md | 2 +- .../zh-cn/docs/Features/http-https/auth.md | 17 +-- .../zh-cn/docs/Features/http-https/header.md | 34 +++--- .../zh-cn/docs/Features/http-https/route.md | 28 ++--- .../docs/Features/http-https/subdomain.md | 28 ++--- content/zh-cn/docs/Features/tcp-udp/_index.md | 13 ++- content/zh-cn/docs/Features/tcpmux/_index.md | 48 ++++---- content/zh-cn/docs/Features/xtcp/_index.md | 38 +++---- 23 files changed, 450 insertions(+), 542 deletions(-) delete mode 100644 content/zh-cn/docs/Features/common/range.md diff --git a/content/zh-cn/docs/Features/_index.md b/content/zh-cn/docs/Features/_index.md index dce6637..f74e363 100644 --- a/content/zh-cn/docs/Features/_index.md +++ b/content/zh-cn/docs/Features/_index.md @@ -2,5 +2,5 @@ title: "功能特性" weight: 5 description: > - 了解 frp 所支持的一些功能特性。 + 了解 frp 支持的各种功能特性。 --- diff --git a/content/zh-cn/docs/Features/common/authentication.md b/content/zh-cn/docs/Features/common/authentication.md index d9f76ab..c0a015b 100644 --- a/content/zh-cn/docs/Features/common/authentication.md +++ b/content/zh-cn/docs/Features/common/authentication.md @@ -3,44 +3,45 @@ title: "身份认证" weight: 3 --- -目前 frpc 和 frps 之间支持两种身份验证方式,`token` 和 `oidc`,默认为 `token`。 +目前 frpc 和 frps 之间支持两种身份验证方式,`token` 和 `oidc`,默认为 `token`。这些认证方式允许您验证客户端与服务端之间的通信,并确保只有授权用户能够建立连接。 -通过 `frpc.ini` 和 `frps.ini` 的 `[common]` 段落中配置 `authentication_method` 来指定要使用的身份验证方式。 +## Token -只有通过身份验证的客户端(frpc)才能成功连接 frps。 +Token 身份认证是一种简单的身份认证方式,只需要在 frp 的客户端 frpc 和服务端 frps 配置文件中配置相同的 token 即可。 -## Token +### 配置示例 + +```toml +# frps.toml +bindPort = 7000 +auth.token = "abc" +``` -基于 Token 的身份验证方式比较简单,需要在 frpc 和 frps 的 `[common]` 段落中配置上相同的 `token` 参数即可。 +```toml +# frpc.toml +auth.token = "abc" +``` -## OIDC +## OIDC (OpenID Connect) 身份认证 -OIDC 是 `OpenID Connect` 的简称,验证流程参考 [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4)。 +OIDC 身份认证是一种基于开放标准的身份认证方式,它通过使用 OIDC 提供者进行身份验证。 -启用这一验证方式,参考配置如下: +验证流程参考 [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4)。 -```ini -# frps.ini -[common] -authentication_method = oidc -oidc_issuer = https://example-oidc-issuer.com/ -oidc_audience = https://oidc-audience.com/.default -``` +### 配置示例 -```ini -# frpc.ini -[common] -authentication_method = oidc -oidc_client_id = 98692467-37de-409a-9fac-bb2585826f18 # Replace with OIDC client ID -oidc_client_secret = oidc_secret -oidc_audience = https://oidc-audience.com/.default -oidc_token_endpoint_url = https://example-oidc-endpoint.com/oauth2/v2.0/token +```toml +# frps.toml +auth.method = "oidc" +auth.oidc.issuer = "https://example-oidc-issuer.com/" +auth.oidc.audience = "https://oidc-audience.com/.default" ``` -## 参数说明 - -| 类型 | 描述 | -| :--- | :--- | -| authentication_method | 身份验证方式,token 或 oidc,默认为 token。 | -| authenticate_heartbeats | 在每一个心跳包中附加上身份认证信息,客户端服务端需要一致。 | -| authenticate_new_work_conns | 在每次创建工作连接时附加上身份认证信息,客户端服务端需要一致。 | +```toml +# frpc.toml +auth.method = "oidc" +auth.oidc.clientID = "98692467-37de-409a-9fac-bb2585826f18" +auth.oidc.clientSecret = "oidc_secret" +auth.oidc.audience = "https://oidc-audience.com/.default" +auth.oidc.tokenEndpointURL = "https://example-oidc-endpoint.com/oauth2/v2.0/token" +``` diff --git a/content/zh-cn/docs/Features/common/client-plugin.md b/content/zh-cn/docs/Features/common/client-plugin.md index feb4735..0a9def7 100644 --- a/content/zh-cn/docs/Features/common/client-plugin.md +++ b/content/zh-cn/docs/Features/common/client-plugin.md @@ -3,98 +3,27 @@ title: "客户端插件" weight: 11 --- -默认情况下,frpc 只会转发请求到本地 TCP 或 UDP 端口,也就是通过 `local_ip` 和 `local_port` 指定的本地服务地址。 +默认情况下,frpc 仅会将请求转发到本地 TCP 或 UDP 端口,即通过 `localIP` 和 `localPort` 指定的本地服务地址。 -通过客户端插件的功能将一些简单的本地服务内置在 frpc 中,可以帮助用户在只启动 frpc 的情况下实现原本需要额外启动其他服务才能实现的功能。 +通过启用客户端插件功能,可以在仅启动 frpc 的情况下内置一些简单的本地服务,从而实现通常需要额外启动其他服务才能实现的功能。 -在每一个代理的配置中,通过 `plugin` 指定需要使用的插件,插件的配置参数都以 `plugin_` 开头。当启用客户端插件后,`local_ip` 和 `local_port` 不再需要配置。 +在每个代理的配置中,你可以通过 `plugin` 来配置要使用的插件和相关参数。启用客户端插件后,无需再配置 `localIP` 和 `localPort`。 -客户端插件可以被应用在任意类型的代理中,但是需要插件本身的协议能够支持。例如静态文件访问插件可以通过 TCP 或者 HTTP 的代理暴露出去。 +客户端插件可用于各种类型的代理,前提是插件本身支持的协议。例如,静态文件访问插件可以通过 TCP 或 HTTP 代理进行暴露。 -使用 `http_proxy` 插件的示例: +以下是使用 `http_proxy` 插件的示例: -```ini -# frpc.ini -[http_proxy] -type = tcp -remote_port = 6000 -plugin = http_proxy -plugin_http_user = abc -plugin_http_passwd = abc +```toml +[[proxies]] +name = "http_proxy" +type = "tcp" +remotePort = 6000 +[proxies.plugin] +type = "http_proxy" +httpUser = "abc" +httpPassword = "abc" ``` -`plugin_http_user` 和 `plugin_http_passwd` 即为 `http_proxy` 插件可选的配置参数。 +`httpUser` 和 `httpPassword` 即为 `http_proxy` 插件可选的配置参数。 -## http_proxy - -HTTP 代理插件,用于将内网机器作为 HTTP 代理暴露给其他服务,可以通过此代理访问到此内网机器能够访问到的其他服务。 - -| 参数 | 可选 | 描述 | -| :--- | :--- | :--- | -| plugin_http_user | 是 | HTTP 代理用户名 | -| plugin_http_passwd | 是 | HTTP 代理密码 | - -## socks5 - -SOCKS5 代理。 - -| 参数 | 可选 | 描述 | -| :--- | :--- | :--- | -| plugin_user | 是 | 连接代理的用户名 | -| plugin_passwd | 是 | 连接代理的密码 | - - -## static_file - -静态文件浏览服务,通过暴露一个简单的 HTTP 服务查看指定的目录下的文件。 - -| 参数 | 可选 | 描述 | -| :--- | :--- | :--- | -| plugin_local_path | 否 | 要对外暴露的文件目录 | -| plugin_strip_prefix | 是 | 用户请求的 URL 路径会被映射到本地文件,如果希望去除用户访问文件的前缀,需要配置此参数 | -| plugin_http_user | 是 | HTTP BasicAuth 用户名 | -| plugin_http_passwd | 是 | HTTP BasicAuth 密码 | - -## unix_domain_socket - -代理本地 Unix 域套接字的服务。 - -| 参数 | 可选 | 描述 | -| :--- | :--- | :--- | -| plugin_unix_path | 否 | 本地 Unix 域套接字地址 | - - -## http2https - -将本地的 HTTPS 服务以 HTTP 的形式暴露出去。 - -| 参数 | 可选 | 描述 | -| :--- | :--- | :--- | -| plugin_local_addr | 否 | 本地服务地址 | -| plugin_host_header_rewrite | 是 | 如果配置,发送给本地服务的请求的 Host 字段会被修改 | -| plugin_header_{header name} | 是 | 发送给本地服务的请求会被加上指定的 header 字段 | - - -## https2http - -将本地的 HTTP 服务以 HTTPS 的形式暴露出去。 - -| 参数 | 可选 | 描述 | -| :--- | :--- | :--- | -| plugin_local_addr | 否 | 本地服务地址 | -| plugin_crt_path | 是 | HTTPS 所需的证书文件,如果 crt 和 key 都为空,则使用自动生成的证书 | -| plugin_key_path | 是 | HTTPS 所需的密钥文件 | -| plugin_host_header_rewrite | 是 | 如果配置,发送给本地服务的请求的 Host 字段会被修改 | -| plugin_header_{header name} | 是 | 发送给本地服务的请求会被加上指定的 header 字段 | - -## https2https - -将本地的 HTTPS 服务以 HTTPS 的形式暴露出去。 - -| 参数 | 可选 | 描述 | -| :--- | :--- | :--- | -| plugin_local_addr | 否 | 本地服务地址 | -| plugin_crt_path | 是 | HTTPS 所需的证书文件,如果 crt 和 key 都为空,则使用自动生成的证书 | -| plugin_key_path | 是 | HTTPS 所需的密钥文件 | -| plugin_host_header_rewrite | 是 | 如果配置,发送给本地服务的请求的 Host 字段会被修改 | -| plugin_header_{header name} | 是 | 发送给本地服务的请求会被加上指定的 header 字段 | +其他插件和相关配置请参考 [Reference](../../../reference/) 中的内容。 diff --git a/content/zh-cn/docs/Features/common/client.md b/content/zh-cn/docs/Features/common/client.md index 1365708..a5b895e 100644 --- a/content/zh-cn/docs/Features/common/client.md +++ b/content/zh-cn/docs/Features/common/client.md @@ -3,45 +3,39 @@ title: "客户端" weight: 9 --- -## 热加载配置文件 +## 动态配置更新 -当修改了 frpc 中的代理配置,可以通过 frpc reload 命令来动态加载配置文件,通常会在 10 秒内完成代理的更新。 +当你需要修改 frpc 的代理配置时,你可以使用 `frpc reload` 命令来实现动态加载配置文件,通常在数秒内完成代理的更新。 -启用此功能需要在 frpc 中启用 admin 端口,用于提供 API 服务。配置如下: +要启用此功能,需要在 frpc 中启用 webServer,以提供 API 服务。配置如下: -```ini -# frpc.ini -[common] -admin_addr = 127.0.0.1 -admin_port = 7400 +```toml +webServer.addr = "127.0.0.1" +webServer.port = 7400 ``` -之后执行重启命令: +然后执行以下命令来重载配置: -`frpc reload -c ./frpc.ini` +`frpc reload -c ./frpc.toml` -等待一段时间后客户端会根据新的配置文件创建、更新、删除代理。 - -需要注意的是,[common] 中的参数除了 start 外目前无法被修改。 +等待一段时间后,客户端将根据新的配置文件创建、更新或删除代理。需要注意的是,非代理相关的公共部分的参数除了 start 外目前无法被修改。 ## 命令行查看代理状态 -frpc 支持通过 `frpc status -c ./frpc.ini` 命令查看代理的状态信息,此功能需要在 frpc 中配置 admin 端口。 +frpc 支持通过 `frpc status -c ./frpc.ini` 命令查看代理的状态信息,此功能需要在 frpc 中启用 webServer。 -## 通过代理连接 frps +## 使用代理连接 frps -在只能通过代理访问外网的环境内,frpc 支持通过 HTTP 或 SOCKS5 代理和 frps 建立连接。 +在只能通过代理访问外部网络的环境中,frpc 支持通过 HTTP 或 SOCKS5 代理与 frps 建立连接。 -可以通过设置 `HTTP_PROXY` 系统环境变量或者通过在 frpc 的配置文件中设置 `http_proxy` 参数来使用此功能。 +你可以通过设置系统环境变量 `HTTP_PROXY` 或在 frpc 的配置文件中设置 `transport.proxyURL` 参数来使用此功能。 -仅在 `protocol = tcp` 时生效。 +仅在 `transport.protocol = "tcp"` 时生效。 -```ini -# frpc.ini -[common] -server_addr = x.x.x.x -server_port = 7000 -http_proxy = http://user:pwd@192.168.1.128:8080 +```toml +serverAddr = "x.x.x.x" +serverPort = 7000 +transport.proxyURL = "http://user:pwd@192.168.1.128:8080" ``` -将 `http_proxy` 设置为 `socks5://user:pwd@192.168.1.128:8080` 也可以连接到 SOCKS5 代理。 +将 `transport.proxyURL` 设置为 `socks5://user:pwd@192.168.1.128:8080` 也可以连接到 SOCKS5 代理。 diff --git a/content/zh-cn/docs/Features/common/configure.md b/content/zh-cn/docs/Features/common/configure.md index 22defee..97c105d 100644 --- a/content/zh-cn/docs/Features/common/configure.md +++ b/content/zh-cn/docs/Features/common/configure.md @@ -3,40 +3,39 @@ title: "配置文件" weight: 1 --- -frp 目前仅支持 ini 格式的配置文件,frps 和 frpc 各自支持不同的参数。 +从 v0.52.0 版本开始,frp 开始支持 TOML、YAML 和 JSON 作为配置文件格式。 -frps 主要配置服务端的一些通用参数,frpc 则需要额外配置每一个代理的详细配置。 +请注意,INI 已被弃用,并将在未来的发布中移除。新功能只能在TOML、YAML 或 JSON 中使用。希望使用这些新功能的用户应相应地切换其配置格式。 ## 格式 -目前仅支持 ini 格式的配置,如下的示例配置将本地 SSH 服务穿透到公网。 +可使用 TOML/YAML/JSON 任何一个您喜欢的格式来编写配置文件,frp 会自动适配进行解析。 + +文档示例主要通过 TOML 编写,如下的示例配置将本地 SSH 服务穿透到公网。 frps 配置: -```ini -[common] -bind_port = 7000 +```toml +bindPort = 7000 ``` frpc 配置: -```ini -[common] -server_addr = x.x.x.x -server_port = 7000 +```toml +serverAddr = "x.x.x.x" +serverPort = 7000 -[ssh] -type = tcp -local_ip = 127.0.0.1 -local_port = 22 -remote_port = 6000 +[[proxies]] +name = "ssh" +type = "tcp" +localIP = "127.0.0.1" +localPort = 22 +remotePort = 6000 ``` -`[common]` 是固定名称的段落,用于配置通用参数。 - -`[ssh]` 仅在 frpc 中使用,用于配置单个代理的参数。代理名称必须唯一,不能重复。 +同一个客户端可以配置多个代理,但是 name 必须确保唯一。 -同一个客户端可以配置多个代理。 +不同的客户端之间,可以通过配置不同的 user 来确保代理名称唯一。 ## 模版渲染 @@ -44,17 +43,16 @@ remote_port = 6000 示例配置如下: -```ini -# frpc.ini -[common] -server_addr = {{ .Envs.FRP_SERVER_ADDR }} -server_port = 7000 - -[ssh] -type = tcp -local_ip = 127.0.0.1 -local_port = 22 -remote_port = {{ .Envs.FRP_SSH_REMOTE_PORT }} +```toml +serverAddr = "{{ .Envs.FRP_SERVER_ADDR }}" +serverPort = 7000 + +[[proxies]] +name = "ssh" +type = "tcp" +localIP = "127.0.0.1" +localPort = 22 +remotePort = {{ .Envs.FRP_SSH_REMOTE_PORT }} ``` 启动 frpc 程序: @@ -62,17 +60,17 @@ remote_port = {{ .Envs.FRP_SSH_REMOTE_PORT }} ``` export FRP_SERVER_ADDR="x.x.x.x" export FRP_SSH_REMOTE_PORT="6000" -./frpc -c ./frpc.ini +./frpc -c ./frpc.toml ``` frpc 会自动使用环境变量渲染配置文件模版,所有环境变量需要以 `.Envs` 为前缀。 ## 配置校验 -通过执行 `frpc verify -c ./frpc.ini` 或 `frps verify -c ./frps.ini` 可以对配置文件中的参数进行预先校验。 +通过执行 `frpc verify -c ./frpc.toml` 或 `frps verify -c ./frps.toml` 可以对配置文件中的参数进行预先校验。 ``` -frpc: the configuration file ./frpc.ini syntax is ok +frpc: the configuration file ./frpc.toml syntax is ok ``` 如果出现此结果,则说明新的配置文件没有错误,否则会输出具体的错误信息。 @@ -81,27 +79,27 @@ frpc: the configuration file ./frpc.ini syntax is ok 通过 `includes` 参数可以在主配置中包含其他配置文件,从而实现将代理配置拆分到多个文件中管理。 -```ini -# frpc.ini -[common] -server_addr = x.x.x.x -server_port = 7000 -includes = ./confd/*.ini +```toml +# frpc.toml +serverAddr = "x.x.x.x" +serverPort = 7000 +includes = ["./confd/*.toml"] ``` -```ini -# ./confd/test.ini -[ssh] -type = tcp -local_ip = 127.0.0.1 -local_port = 22 -remote_port = 6000 +```toml +# ./confd/test.toml +[[proxies]] +name = "ssh" +type = "tcp" +localIP = "127.0.0.1" +localPort = 22 +remotePort = 6000 ``` -上述配置在 frpc.ini 中通过 includes 额外包含了 `./confd` 目录下所有的 ini 文件的代理配置内容,效果等价于将这两个文件合并成一个文件。 +上述配置在 frpc.toml 中通过 includes 额外包含了 `./confd` 目录下所有的 toml 文件的代理配置内容,效果等价于将这两个文件合并成一个文件。 -需要注意的是 includes 指定的文件中只能包含代理配置,common 段落的配置只能放在主配置文件中。 +需要注意的是 includes 指定的文件中只能包含代理配置,通用参数的配置只能放在主配置文件中。 ## 完整配置参数 -由于 frp 目前支持的功能和配置项较多,未在文档中列出的功能参数可以在 [参考](/docs/reference) 中查看。 +由于 frp 目前支持的功能和配置项较多,未在文档中列出的功能参数可以在 [参考](../../../reference) 中查看。 diff --git a/content/zh-cn/docs/Features/common/load-balancer.md b/content/zh-cn/docs/Features/common/load-balancer.md index 7d4a796..18d18a7 100644 --- a/content/zh-cn/docs/Features/common/load-balancer.md +++ b/content/zh-cn/docs/Features/common/load-balancer.md @@ -5,75 +5,78 @@ weight: 6 ## 负载均衡 -可以将多个相同类型的代理加入到同一个 `group` 中,从而实现负载均衡的能力。 - -目前支持的代理类型:`tcp`, `http`, `tcpmux` - -```ini -# frpc.ini -[test1] -type = tcp -local_port = 8080 -remote_port = 80 -group = web -group_key = 123 - -[test2] -type = tcp -local_port = 8081 -remote_port = 80 -group = web -group_key = 123 +你可以将多个相同类型的代理加入到同一个 `group` 中,以实现负载均衡的能力。 + +目前支持的代理类型包括:`tcp`, `http`, `tcpmux`。 + +```toml +# frpc.toml +[[proxies]] +name = "test1" +type = "tcp" +localPort = 8080 +remotePort = 80 +loadBalancer.group = "web" +loadBalancer.groupKey = "123" + +[[proxies]] +name = "test2" +type = "tcp" +localPort = 8081 +remotePort = 80 +loadBalancer.group = "web" +loadBalancer.groupKey = "123" ``` -用户连接 frps 服务器的 80 端口,frps 会将接收到的用户连接随机分发给其中一个存活的 proxy。这样可以在一台 frpc 机器挂掉后仍然有其他节点能够提供服务。 +当用户连接 frps 服务器的 80 端口时,frps 会将接收到的用户连接随机分发给其中一个存活的代理。这可以确保即使一台 frpc 机器挂掉,仍然有其他节点能够提供服务。 -`tcp` 类型代理要求 `group_key` 相同,做权限验证,且 `remote_port` 相同。 +对于 tcp 类型代理,需要确保 `groupKey` 相同以进行权限验证,同时 `remotePort` 也需一致。 -`http` 类型代理要求 `group_key`, `custom_domains` 或 `subdomain` 和 `locations` 相同。 +对于 http 类型代理,需要保证 `groupKey`, `customDomains`(自定义域名),`subdomain` 和 `locations` 相同。 ## 健康检查 -通过给代理配置健康检查的参数,可以在要反向代理的服务出现故障时,将这个服务从 frps 中摘除,搭配负载均衡的功能,可以用来实现高可用的架构,避免服务单点故障。 +通过给代理配置健康检查参数,可以在要反向代理的服务出现故障时,将该服务从 frps 中摘除。结合负载均衡的功能,这可用于实现高可用架构,避免服务单点故障。 -在每一个 proxy 的配置下加上 `health_check_type = {type}` 来启用健康检查功能。 +要启用健康检查功能,需要在每个代理的配置中添加 `healthCheck.type = {type}`。 -`type` 目前可选 `tcp` 和 `http`。 +目前支持的类型有 `tcp` 和 `http`。 -tcp 只要能够建立连接则认为服务正常,http 会发送一个 http 请求,服务需要返回 2xx 的状态码才会被认为正常 +* 对于 `tcp`,只要能够建立连接,即认为服务正常。 +* 对于 `http`,会发送一个 HTTP 请求,服务需要返回状态码 2xx 才会被视为正常。 -tcp 示例配置如下: +以下是 `tcp` 示例配置: -```ini -# frpc.ini -[test1] -type = tcp -local_port = 22 -remote_port = 6000 +```toml +[[proxies]] +name = "test1" +type = "tcp" +localPort = 22 +remotePort = 6000 # 启用健康检查,类型为 tcp -health_check_type = tcp +healthCheck.type = "tcp" # 建立连接超时时间为 3 秒 -health_check_timeout_s = 3 +healthCheck.timeoutSeconds = 3 # 连续 3 次检查失败,此 proxy 会被摘除 -health_check_max_failed = 3 +healthCheck.maxFailed = 3 # 每隔 10 秒进行一次健康检查 -health_check_interval_s = 10 +healthCheck.intervalSeconds = 10 ``` -http 示例配置如下: +以下是 http 示例配置: -```ini -# frpc.ini -[web] -type = http -local_ip = 127.0.0.1 -local_port = 80 -custom_domains = test.yourdomain.com +```toml +[[proxies]] +name = "web" +type = "http" +localIP = "127.0.0.1" +localPort = 80 +customDomains = ["test.yourdomain.com"] # 启用健康检查,类型为 http -health_check_type = http -# 健康检查发送 http 请求的 url,后端服务需要返回 2xx 的 http 状态码 -health_check_url = /status -health_check_interval_s = 10 -health_check_max_failed = 3 -health_check_timeout_s = 3 +healthCheck.type = "http" +# 健康检查发送 http 请求的 path,后端服务需要返回 2xx 的 http 状态码 +healthCheck.path = "/status" +healthCheck.timeoutSeconds = 3 +healthCheck.maxFailed = 3 +healthCheck.intervalSeconds = 10 ``` diff --git a/content/zh-cn/docs/Features/common/monitor.md b/content/zh-cn/docs/Features/common/monitor.md index 905731f..366005d 100644 --- a/content/zh-cn/docs/Features/common/monitor.md +++ b/content/zh-cn/docs/Features/common/monitor.md @@ -3,16 +3,16 @@ title: "监控" weight: 2 --- -目前 frps 服务端支持内存和 Prometheus 两种监控系统。 +目前,frps 服务端支持两种监控系统:内存监控和 Prometheus 监控。 -## 内存 +## 内存监控 -内存中存储的监控数据主要用于 Dashboard 展示,当在 frps 配置中开启 Dashboard 功能后会默认开启内部的监控。 +内存中存储的监控数据主要用于 Dashboard 展示。当在 frps 配置中开启 Dashboard 功能后,内存监控默认启用。 -内存中的监控数据每次重启进程后会清空,监控数据可以通过 Dashboard 的地址发送 HTTP 请求获取,但是目前此 API 尚不规范,不推荐直接使用。 +请注意,内存中的监控数据在每次重启进程后会被清空,或者保留 7 天。监控数据可以通过 Dashboard 的地址发送 HTTP 请求获取,但目前此 API 尚不规范,不建议直接使用。 -## Prometheus +## Prometheus 监控 -由于设计问题,Prometheus 对外提供的查询接口复用了 Dashboard 的地址,所以要使用 Prometheus 监控,必须要首先开启 Dashboard。 +由于设计问题,Prometheus 对外提供的查询接口与 Dashboard 的地址重用,因此要使用 Prometheus 监控,必须首先启用 Dashboard。 -在 frps.ini 中启用 Dashboard,并设置 `enable_prometheus = true`,则通过 `http://{dashboard_addr}/metrics` 可以获取到 Prometheus 的监控数据。 +在 frps.ini 中启用 Dashboard 并设置 `enablePrometheus = true`,然后你可以通过访问 `http://{dashboard_addr}/metrics` 来获取 Prometheus 的监控数据。 diff --git a/content/zh-cn/docs/Features/common/network/_index.md b/content/zh-cn/docs/Features/common/network/_index.md index abca926..ae7b081 100644 --- a/content/zh-cn/docs/Features/common/network/_index.md +++ b/content/zh-cn/docs/Features/common/network/_index.md @@ -2,5 +2,5 @@ title: "通信安全及优化" weight: 5 description: > - 提供更丰富的通信协议和安全。 + 提供丰富的通信协议和安全性。 --- diff --git a/content/zh-cn/docs/Features/common/network/network-tls.md b/content/zh-cn/docs/Features/common/network/network-tls.md index 305c382..3200e60 100644 --- a/content/zh-cn/docs/Features/common/network/network-tls.md +++ b/content/zh-cn/docs/Features/common/network/network-tls.md @@ -3,15 +3,15 @@ title: "自定义 TLS 协议加密" weight: 2 --- -`use_encryption` 和 `STCP` 等功能能有效防止流量内容在通信过程中被盗取,但是无法判断对方的身份是否合法,存在被中间人攻击的风险。为此 frp 支持 frpc 和 frps 之间的流量通过 TLS 协议加密,并且支持客户端或服务端单向验证,双向验证等功能。 +`transport.useEncryption` 和 `STCP` 等功能能有效防止流量内容在通信过程中被盗取,但是无法判断对方的身份是否合法,存在被中间人攻击的风险。为此 frp 支持 frpc 和 frps 之间的流量通过 TLS 协议加密,并且支持客户端或服务端单向验证,双向验证等功能。 -当 `frps.ini` 的 `common` 中 `tls_only = true` 时,表示 server 端只接受 TLS 连接的客户端,这也是 frps 验证 frpc 身份的前提条件。如果 `frps.ini` 的 `common` 中 `tls_trusted_ca_file` 内容是有效的话,那么默认就会开启 `tls_only = true`。 +当 `frps.toml` 中 `transport.tls.force = true` 时,表示 server 端只接受 TLS 连接的客户端,这也是 frps 验证 frpc 身份的前提条件。如果 `frps.toml` 中 `transport.tls.trustedCaFile` 内容是有效的话,那么默认就会开启 `transport.tls.force = true`。 -**注意:启用此功能后除 xtcp 且 xtcp 的 protocol 配置为 kcp 外,可以不用再设置 use_encryption 重复加密** +**注意:启用此功能后除 xtcp ,可以不用再设置 use_encryption 重复加密** ## TLS 默认开启方式 -从 v0.50.0 开始,`tls_enable` 的默认值将会为 true,默认开启 TLS 协议加密。 +从 v0.50.0 开始,`transport.tls.enable` 的默认值将会为 true,默认开启 TLS 协议加密。 如果 frps 端没有配置证书,则会使用随机生成的证书来加密流量。 @@ -19,51 +19,44 @@ weight: 2 ## frpc 单向校验 frps 身份 -```ini -# frpc.ini -[common] -tls_trusted_ca_file = /to/ca/path/ca.crt +```toml +# frpc.toml +transport.tls.trustedCaFile = "/to/ca/path/ca.crt" -# frps.ini -[common] -tls_cert_file = /to/cert/path/server.crt -tls_key_file = /to/key/path/server.key +# frps.toml +transport.tls.certFile = "/to/cert/path/server.crt" +transport.tls.keyFile = "/to/key/path/server.key" ``` -frpc 需要额外加载 ca 证书,frps 需要额外指定 TLS 配置。frpc 通过 ca 证书单向验证 frps -的身份。这就要求 frps 的 `server.crt` 对 frpc 的 ca 是合法的。 +frpc 需要额外加载 ca 证书,frps 需要额外指定 TLS 配置。frpc 通过 ca 证书单向验证 frps 的身份。这就要求 frps 的 `server.crt` 对 frpc 的 ca 是合法的。 合法: 如果证书是 ca 签发的,或者证书是在 ca 的信任链中,那即认为: 该证书对 ca 而言是合法的。 ## frps 单向验证 frpc 的身份 -```ini -# frpc.ini -[common] -tls_cert_file = /to/cert/path/client.crt -tls_key_file = /to/key/path/client.key +```toml +# frpc.toml +transport.tls.certFile = "/to/cert/path/client.crt" +transport.tls.keyFile = "/to/key/path/client.key" # frps.ini -[common] -tls_trusted_ca_file = /to/ca/path/ca.crt +transport.tls.trustedCaFile = "/to/ca/path/ca.crt" ``` frpc 需要额外加载 TLS 配置,frps 需要额外加载 ca 证书。frps 通过 ca 证书单向验证 frpc 的身份。这就要求 frpc 的 `client.crt` 对 frps 的 ca 是合法的。 ## 双向验证 -```ini -# frpc.ini -[common] -tls_cert_file = /to/cert/path/client.crt -tls_key_file = /to/key/path/client.key -tls_trusted_ca_file = /to/ca/path/ca.crt +```toml +# frpc.toml +transport.tls.certFile = "/to/cert/path/client.crt" +transport.tls.keyFile = "/to/key/path/client.key" +transport.tls.trustedCaFile = "/to/ca/path/ca.crt" -# frps.ini -[common] -tls_cert_file = /to/cert/path/server.crt -tls_key_file = /to/key/path/server.key -tls_trusted_ca_file = /to/ca/path/ca.crt +# frps.toml +transport.tls.certFile = "/to/cert/path/server.crt" +transport.tls.keyFile = "/to/key/path/server.key" +transport.tls.trustedCaFile = "/to/ca/path/ca.crt" ``` 双向验证即 frpc 和 frps 通过本地 ca 证书去验证对方的身份。理论上 frpc 和 frps 的 ca 证书可以不同,只要能验证对方身份即可。 diff --git a/content/zh-cn/docs/Features/common/network/network.md b/content/zh-cn/docs/Features/common/network/network.md index 5066101..9b56f81 100644 --- a/content/zh-cn/docs/Features/common/network/network.md +++ b/content/zh-cn/docs/Features/common/network/network.md @@ -5,36 +5,37 @@ weight: 1 ## 加密与压缩 +**注: 当 frpc 和 frps 之间启用了 TLS 之后,流量会被全局加密,不再需要配置单个代理上的加密,新版本中已经默认启用。** + 每一个代理都可以选择是否启用加密和压缩的功能。 加密算法采用 aes-128-cfb,压缩算法采用 snappy。 在每一个代理的配置中使用如下参数指定: -```ini -# frpc.ini -[ssh] -type = tcp -local_port = 22 -remote_port = 6000 -use_encryption = true -use_compression = true +```toml +[[proxies]] +name = "ssh" +type = "tcp" +localPort = 22 +remotePort = 6000 +transport.useEncryption = true +transport.useCompression = true ``` -通过设置 `use_encryption = true`,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止传输内容被截取。 +通过设置 `transport.useEncryption = true`,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止传输内容被截取。 -如果传输的报文长度较长,通过设置 `use_compression = true` 对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 CPU 资源。 +如果传输的报文长度较长,通过设置 `transport.useCompression = true` 对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 CPU 资源。 ## TCP 多路复用 客户端和服务器端之间的连接支持多路复用,不再需要为每一个用户请求创建一个连接,使连接建立的延迟降低,并且避免了大量文件描述符的占用,使 frp 可以承载更高的并发数。 -该功能默认启用,如需关闭,可以在 frps.ini 和 frpc.ini 中配置,该配置项在服务端和客户端必须一致: +该功能默认启用,如需关闭,可以在 frps.toml 和 frpc.toml 中配置,该配置项在服务端和客户端必须一致: -```ini -# frps.ini 和 frpc.ini 中 -[common] -tcp_mux = false +```toml +# frps.toml 和 frpc.toml 中 +transport.tcpMux = false ``` ## 连接池 @@ -43,20 +44,20 @@ tcp_mux = false 这一功能适合有大量短连接请求时开启。 -1. 首先可以在 frps.ini 中设置每个代理可以创建的连接池上限,避免大量资源占用,客户端设置超过此配置后会被调整到当前值: +**注: 当 TCP 多路复用启用后,连接池的提升有限,一般场景下无需关心。** + +1. 首先可以在 frps.toml 中设置每个代理可以创建的连接池上限,避免大量资源占用,客户端设置超过此配置后会被调整到当前值: - ```ini - # frps.ini - [common] - max_pool_count = 5 + ```toml + # frps.toml + transport.maxPoolCount = 5 ``` -2. 在 frpc.ini 中为客户端启用连接池,指定预创建连接的数量: +2. 在 frpc.toml 中为客户端启用连接池,指定预创建连接的数量: - ```ini - # frpc.ini - [common] - pool_count = 1 + ```toml + # frpc.toml + transport.poolCount = 1 ``` ## 支持 KCP 协议 @@ -65,25 +66,23 @@ tcp_mux = false 开启 KCP 协议支持: -1. 在 frps.ini 中启用 KCP 协议支持,指定一个 udp 端口用于接收客户端请求: +1. 在 frps.toml 中启用 KCP 协议支持,指定一个 UDP 端口用于接收客户端请求: - ```ini - # frps.ini - [common] - bind_port = 7000 - # kcp 绑定的是 udp 端口,可以和 bind_port 一样 - kcp_bind_port = 7000 + ```toml + # frps.toml + bindPort = 7000 + # kcp 绑定的是 UDP 端口,可以和 bindPort 一样 + kcpBindPort = 7000 ``` -2. 在 frpc.ini 指定需要使用的协议类型,其他代理配置不需要变更: +2. 在 frpc.toml 指定需要使用的协议类型,其他代理配置不需要变更: - ```ini - # frpc.ini - [common] - server_addr = x.x.x.x - # server_port 指定为 frps 的 kcp_bind_port - server_port = 7000 - protocol = kcp + ```toml + # frpc.toml + serverAddr = "x.x.x.x" + # serverPort 指定为 frps 的 kcpBindPort + serverPort = 7000 + transport.protocol = "kcp" ``` ## 支持 QUIC 协议 @@ -92,23 +91,21 @@ tcp_mux = false 开启 QUIC 协议支持: -1. 在 frps.ini 中启用 QUIC 协议支持,指定一个 udp 端口用于接收客户端请求: +1. 在 frps.toml 中启用 QUIC 协议支持,指定一个 UDP 端口用于接收客户端请求: - ```ini - # frps.ini - [common] - bind_port = 7000 - # quic 绑定的是 udp 端口,可以和 bind_port 一样 - quic_bind_port = 7000 + ```toml + # frps.toml + bindPort = 7000 + # QUIC 绑定的是 UDP 端口,可以和 bindPort 一样 + quicBindPort = 7000 ``` -2. 在 frpc.ini 指定需要使用的协议类型,其他代理配置不需要变更: +2. 在 frpc.toml 指定需要使用的协议类型,其他代理配置不需要变更: - ```ini - # frpc.ini - [common] - server_addr = x.x.x.x - # server_port 指定为 frps 的 quic_bind_port - server_port = 7000 - protocol = quic + ```toml + # frpc.toml + serverAddr = "x.x.x.x" + # serverPort 指定为 frps 的 quicBindPort + serverPort = 7000 + transport.protocol = "quic" ``` diff --git a/content/zh-cn/docs/Features/common/range.md b/content/zh-cn/docs/Features/common/range.md deleted file mode 100644 index ad068c9..0000000 --- a/content/zh-cn/docs/Features/common/range.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "范围端口映射" -weight: 8 ---- - -在 frpc 的配置文件中可以指定映射多个端口,目前只支持 TCP 和 UDP 的代理类型。 - -这一功能通过 `range:` 段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。 - -例如要映射本地 6000-6005, 6007 这7个端口,主要配置如下: - -```ini -# frpc.ini -[range:test_tcp] -type = tcp -local_ip = 127.0.0.1 -local_port = 6000-6005,6007 -remote_port = 6000-6005,6007 -``` - -实际连接成功后会创建 7 个 proxy,命名为 `test_tcp_0, test_tcp_1 ... test_tcp_6`。 diff --git a/content/zh-cn/docs/Features/common/realip.md b/content/zh-cn/docs/Features/common/realip.md index 81241c3..5c7ca06 100644 --- a/content/zh-cn/docs/Features/common/realip.md +++ b/content/zh-cn/docs/Features/common/realip.md @@ -17,17 +17,18 @@ frp 支持通过 `Proxy Protocol` 协议来传递经过 frp 代理的请求的 这里以 `HTTPS` 类型为例: -```ini -# frpc.ini -[web] -type = https -local_port = 443 -custom_domains = test.yourdomain.com +```toml +# frpc.toml +[[proxies]] +name = "web" +type = "https" +localPort = 443 +customDomains = ["test.yourdomain.com"] # 目前支持 v1 和 v2 两个版本的 proxy protocol 协议。 -proxy_protocol_version = v2 +transport.proxyProtocolVersion = "v2" ``` -只需要在代理配置中增加一行 `proxy_protocol_version = v2` 即可开启此功能。 +只需要在代理配置中增加一行 `transport.proxyProtocolVersion = "v2"` 即可开启此功能。 本地的 HTTPS 服务可以通过在 nginx 的配置中启用 `Proxy Protocol` 的解析并将结果设置在 `X-Real-IP` 这个 Header 中就可以在自己的 Web 服务中通过 `X-Real-IP` 获取到用户的真实 IP。 diff --git a/content/zh-cn/docs/Features/common/server-manage.md b/content/zh-cn/docs/Features/common/server-manage.md index 46321d4..2adac3d 100644 --- a/content/zh-cn/docs/Features/common/server-manage.md +++ b/content/zh-cn/docs/Features/common/server-manage.md @@ -5,21 +5,27 @@ weight: 10 ## 端口白名单 -为了防止端口被滥用,可以手动指定允许哪些端口被使用,在服务端配置中通过 `allow_ports` 来指定: +为了防止端口被滥用,可以手动指定允许哪些端口被使用,在服务端配置中通过 `allowPorts` 来指定: -```ini +```toml # frps.ini -[common] -allow_ports = 2000-3000,3001,3003,4000-50000 +allowPorts = [ + { start = 2000, end = 3000 }, + { single = 3001 }, + { single = 3003 }, + { start = 4000, end = 50000 } +] ``` -`allow_ports` 可以配置允许使用的某个指定端口或者是一个范围内的所有端口,以 `,` 分隔,指定的范围以 `-` 分隔。 +`allowPorts` 可以配置允许使用的某个指定端口或者是一个范围内的所有端口。 ## 端口复用 -目前 frps 中的 `vhost_http_port` 和 `vhost_https_port` 支持配置成和 `bind_port` 为同一个端口,frps 会对连接的协议进行分析,之后进行不同的处理。 +目前 frps 中的 `vhostHTTPPort` 和 `vhostHTTPSPort` 支持配置成和 `bindPort` 为同一个端口,frps 会对连接的协议进行分析,之后进行不同的处理。 -例如在某些限制较严格的网络环境中,可以将 `bind_port` 和 `vhost_https_port` 都设置为 443。 +例如在某些限制较严格的网络环境中,可以将 `bindPort` 和 `vhostHTTPSPort` 都设置为 443。 + +需要注意的是,如果你想将 `vhostHTTPSPort` 和 `bindPort` 配置为相同的端口,需要首先将 `transport.tls.disableCustomTLSFirstByte` 设置为false。 ## 限速 @@ -27,15 +33,16 @@ allow_ports = 2000-3000,3001,3003,4000-50000 目前支持在客户端的代理配置中设置代理级别的限速,限制单个 proxy 可以占用的带宽。 -```ini -# frpc.ini -[ssh] -type = tcp -local_port = 22 -remote_port = 6000 -bandwidth_limit = 1MB +```toml +# frpc.toml +[[proxies]] +name = "ssh" +type = "tcp" +localPort = 22 +remotePort = 6000 +transport.bandwidthLimit = "1MB" ``` -在代理配置中增加 `bandwidth_limit` 字段启用此功能,目前仅支持 `MB` 和 `KB` 单位。 +在代理配置中增加 `transport.bandwidthLimit` 字段启用此功能,目前仅支持 `MB` 和 `KB` 单位。 -限速能力默认在客户端实现,如果希望启用服务端限速,需要额外配置 `bandwidth_limit_mode = server`。 +限速能力默认在客户端实现,如果希望启用服务端限速,需要额外配置 `transport.bandwidthLimitMode = "server"`。 diff --git a/content/zh-cn/docs/Features/common/server-plugin.md b/content/zh-cn/docs/Features/common/server-plugin.md index a76911f..ae97927 100644 --- a/content/zh-cn/docs/Features/common/server-plugin.md +++ b/content/zh-cn/docs/Features/common/server-plugin.md @@ -216,45 +216,47 @@ Response ## frps 中插件配置 -```ini -[common] -bind_port = 7000 - -[plugin.user-manager] -addr = 127.0.0.1:9000 -path = /handler -ops = Login - -[plugin.port-manager] -addr = https://127.0.0.1:9001 -path = /handler -ops = NewProxy -tls_verify = true +```toml +bindPort = 7000 + +[[httpPlugins]] +name = "user-manager" +addr = "127.0.0.1:9000" +path = "/handler" +ops = ["Login"] + +[[httpPlugins]] +name = "port-manager" +addr = "127.0.0.1:9001" +path = "/handler" +ops = ["NewProxy"] ``` -addr: 插件监听的网络地址,支持 HTTP 和 HTTPS,默认为 HTTP。 -path: 插件监听的请求路径。 -ops: 插件需要处理的操作列表,多个 op 以英文逗号分隔。 -tls_verify: 如果是 HTTPS 协议,支持忽略 TLS 身份验证。 +* addr: 插件监听的网络地址,支持 HTTP 和 HTTPS,默认为 HTTP。 +* path: 插件监听的请求路径。 +* ops: 插件需要处理的操作列表,多个 op 以英文逗号分隔。 +* tls_verify: 如果是 HTTPS 协议,支持忽略 TLS 身份验证。 ## 元数据 为了减少 frps 的代码修改,同时提高管理插件的扩展能力,在 frpc 的配置文件中引入自定义元数据的概念。元数据会在调用 RPC 请求时发送给插件。 -元数据以 `meta_` 开头,可以配置多个,元数据分为两种,一种配置在 `common` 下,一种配置在各个 `proxy` 中。 +有两种类型的元数据条目,全局条目和每个代理配置下的条目。全局元数据将在客户端登录时附加在 Login 请求中,并在其他 RPC 请求中附加在 `user.metas` 中。 + +每个代理配置下的元数据条目仅会在 NewProxy 操作中通过 metas 传递。 ``` -# frpc.ini -[common] -server_addr = 127.0.0.1 -server_port = 7000 -user = fake -meta_token = fake -meta_version = 1.0.0 - -[ssh] -type = tcp -local_port = 22 -remote_port = 6000 -meta_id = 123 +# frpc.toml +serverAddr = "127.0.0.1" +serverPort = 7000 +user = "fake" +metadatas.token = "fake" +metadatas.version = "1.0.0" + +[[proxies]] +name = "ssh" +type = "tcp" +localPort = 22 +remotePort = 6000 +metadatas.id = "123" ``` diff --git a/content/zh-cn/docs/Features/common/ui.md b/content/zh-cn/docs/Features/common/ui.md index cbac007..6c31d92 100644 --- a/content/zh-cn/docs/Features/common/ui.md +++ b/content/zh-cn/docs/Features/common/ui.md @@ -11,50 +11,48 @@ weight: 4 **注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。** -需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能: +需要在 frps.toml 中指定 dashboard 服务使用的端口,即可开启此功能: -```ini -# frps.ini -[common] -dashboard_port = 7500 +```toml +# frps.toml +webServer.port = 7500 # dashboard 用户名密码,可选,默认为空 -dashboard_user = admin -dashboard_pwd = admin +webServer.user = "admin" +webServer.password = "admin" ``` -打开浏览器通过 `http://[server_addr]:7500` 访问 Dashboard 界面,输入用户名密码 `admin`。 +打开浏览器通过 `http://[server addr]:7500` 访问 Dashboard 界面,输入用户名密码 `admin`。 你也可以通过配置 TLS 证书来启用 HTTPS 接口: -```ini -dashboard_tls_mode = true -dashboard_tls_cert_file = server.crt -dashboard_tls_key_file = server.key +```toml +webServer.tls.certFile = "server.crt" +webServer.tls.keyFile = "server.key" ``` ## 客户端管理界面 frpc 内置的 Admin UI 可以帮助用户通过浏览器来查询和管理客户端的 proxy 状态和配置。 -需要在 frpc.ini 中指定 admin 服务使用的端口,即可开启此功能: +需要在 frpc.toml 中指定 admin 服务使用的端口,即可开启此功能: -```ini -# frpc.ini -[common] -admin_addr = 127.0.0.1 -admin_port = 7400 -admin_user = admin -admin_pwd = admin +```toml +# frpc.toml +webServer.addr = "127.0.0.1" +webServer.port = 7400 +webServer.user = "admin" +webServer.password = "admin" ``` 打开浏览器通过 `http://127.0.0.1:7400` 访问 Admin UI。 如果想要在外网环境访问 Admin UI,可以将 7400 端口通过 frp 映射出去即可,但需要重视安全风险。 -```ini -# frpc.ini -[admin_ui] -type = tcp -local_port = 7400 -remote_port = 7400 +```toml +# frpc.toml +[[proxies]] +name = "admin_ui" +type = "tcp" +localPort = 7400 +remotePort = 7400 ``` diff --git a/content/zh-cn/docs/Features/http-https/_index.md b/content/zh-cn/docs/Features/http-https/_index.md index b29fcf7..220bb71 100644 --- a/content/zh-cn/docs/Features/http-https/_index.md +++ b/content/zh-cn/docs/Features/http-https/_index.md @@ -9,4 +9,4 @@ HTTP 和 HTTPS 是 frp 中针对这两种协议额外提供了一些特殊的能 如果不需要用到相关的特殊功能,可以直接使用 TCP 类型的代理,更加简单方便。 -HTTP 和 HTTPS 协议的一个特点是发送的请求都具有 Host 字段,通过该字段描述要访问的服务。基于这个特点,frp 服务端只需要监听在一个端口(通过 `vhost_http_port` 和 `vhost_https_port` 指定)。就可以根据请求的 Host 来决定需要路由给哪一个代理,而不需要像 TCP 类型那样为每一个服务绑定一个端口。 +HTTP 和 HTTPS 协议的一个特点是发送的请求都具有 Host 字段,通过该字段描述要访问的服务。基于这个特点,frp 服务端只需要监听在一个端口(通过 `vhostHTTPPort` 和 `vhostHTTPSPort` 指定)。就可以根据请求的 Host 来决定需要路由给哪一个代理,而不需要像 TCP 类型那样为每一个服务绑定一个端口。 diff --git a/content/zh-cn/docs/Features/http-https/auth.md b/content/zh-cn/docs/Features/http-https/auth.md index 4c3e7a3..5e1707c 100644 --- a/content/zh-cn/docs/Features/http-https/auth.md +++ b/content/zh-cn/docs/Features/http-https/auth.md @@ -9,14 +9,15 @@ frp 支持通过 HTTP Basic Auth 来保护你的 web 服务,使用户需要通 该功能目前仅限于 HTTP 类型的代理,需要在 frpc 的代理配置中添加用户名和密码的设置。 -```ini -# frpc.ini -[web] -type = http -local_port = 80 -custom_domains = test.yourdomain.com -http_user = abc -http_pwd = abc +```toml +# frpc.toml +[[proxies]] +name = "web" +type = "http" +localPort = 80 +customDomains = ["test.yourdomain.com"] +httpUser = "abc" +httpPassword = "abc" ``` 通过浏览器访问 `http://test.yourdomain.com`,需要输入配置的用户名和密码才能访问。 diff --git a/content/zh-cn/docs/Features/http-https/header.md b/content/zh-cn/docs/Features/http-https/header.md index d8a5d06..b1b1e80 100644 --- a/content/zh-cn/docs/Features/http-https/header.md +++ b/content/zh-cn/docs/Features/http-https/header.md @@ -7,13 +7,14 @@ weight: 2 通常情况下 frp 不会修改转发的任何数据。但有一些后端服务会根据 HTTP 请求 header 中的 Host 字段来展现不同的网站,例如 nginx 的虚拟主机服务,启用 Host Header 的修改功能可以动态修改 HTTP 请求中的 Host 字段。需要注意的是,该功能仅限于 HTTP 类型的代理。 -```ini -# frpc.ini -[web] -type = http -local_port = 80 -custom_domains = test.yourdomain.com -host_header_rewrite = dev.yourdomain.com +```toml +# frpc.toml +[[proxies]] +name = "web" +type = "http" +localPort = 80 +customDomains = ["test.yourdomain.com"] +hostHeaderRewrite = "dev.yourdomain.com" ``` 原来 HTTP 请求中的 Host 字段 `test.yourdomain.com` 转发到后端服务时会被替换为 `dev.yourdomain.com`。 @@ -22,14 +23,15 @@ host_header_rewrite = dev.yourdomain.com 对于类型为 HTTP 的代理,可以设置在转发中动态添加的 Header 参数 -```ini -# frpc.ini -[web] -type = http -local_port = 80 -custom_domains = test.yourdomain.com -host_header_rewrite = dev.yourdomain.com -header_X-From-Where = frp +```toml +# frpc.toml +[[proxies]] +name = "web" +type = "http" +localPort = 80 +customDomains = ["test.yourdomain.com"] +hostHeaderRewrite = "dev.yourdomain.com" +requestHeaders.set.x-from-where = "frp" ``` -对于参数配置中所有以 `header_` 开头的参数(支持同时配置多个),都会被添加到 HTTP 请求的 Header 中,根据如上的配置,会在请求的 Header 中加上 `X-From-Where: frp`。 +根据如上的配置,会在请求的 Header 中加上 `x-from-where: frp`。 diff --git a/content/zh-cn/docs/Features/http-https/route.md b/content/zh-cn/docs/Features/http-https/route.md index 8424588..05308c4 100644 --- a/content/zh-cn/docs/Features/http-https/route.md +++ b/content/zh-cn/docs/Features/http-https/route.md @@ -7,21 +7,23 @@ weight: 5 frp 支持根据请求的 URL 路径路由转发到不同的后端服务。 -通过配置文件中的 locations 字段指定一个或多个 proxy 能够匹配的 URL 前缀(目前仅支持最大前缀匹配,之后会考虑正则匹配)。例如指定 `locations = /news`,则所有 URL 以 `/news` 开头的请求都会被转发到这个服务。 +通过配置文件中的 locations 字段指定一个或多个 proxy 能够匹配的 URL 前缀(目前仅支持最大前缀匹配,之后会考虑正则匹配)。例如指定 `locations = "/news"`,则所有 URL 以 `/news` 开头的请求都会被转发到这个服务。 -```ini -# frpc.ini -[web01] -type = http -local_port = 80 -custom_domains = web.yourdomain.com -locations = / +```toml +# frpc.toml +[[proxies]] +name = "web01" +type = "http" +localPort = 80 +customDomains = ["web.yourdomain.com"] +locations = ["/"] -[web02] -type = http -local_port = 81 -custom_domains = web.yourdomain.com -locations = /news,/about +[[proxies]] +name = "web02" +type = "http" +localPort = 81 +customDomains = ["web.yourdomain.com"] +locations = ["/news", "/about"] ``` 按照上述的示例配置后,`web.yourdomain.com` 这个域名下所有以 `/news` 以及 `/about` 作为前缀的 URL 请求都会被转发到 web02,其余的请求会被转发到 web01。 diff --git a/content/zh-cn/docs/Features/http-https/subdomain.md b/content/zh-cn/docs/Features/http-https/subdomain.md index fe49609..f53294f 100644 --- a/content/zh-cn/docs/Features/http-https/subdomain.md +++ b/content/zh-cn/docs/Features/http-https/subdomain.md @@ -5,28 +5,28 @@ weight: 4 在多人同时使用一个 frps 时,通过自定义二级域名的方式来使用会更加方便。 -通过在 frps 的配置文件中配置 `subdomain_host`,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置 `custom_domains`,而是配置一个 subdomain 参数。 +通过在 frps 的配置文件中配置 `subdomainHost`,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置 `customDomains`,而是配置一个 `subdomain` 参数。 -只需要将 `*.{subdomain_host}` 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 `{subdomain}.{subdomain_host}` 来访问自己的 web 服务。 +只需要将 `*.{subdomainHost}` 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 `{subdomain}.{subdomainHost}` 来访问自己的 web 服务。 -```ini -# frps.ini -[common] -subdomain_host = frps.com +```toml +# frps.toml +subdomainHost = "frps.com" ``` 将泛域名 `*.frps.com` 解析到 frps 所在服务器的 IP 地址。 -```ini -# frpc.ini -[web] -type = http -local_port = 80 -subdomain = test +```toml +# frpc.toml +[[proxies]] +name = "web" +type = "http" +localPort = 80 +subdomain = "test" ``` frps 和 frpc 都启动成功后,通过 `test.frps.com` 就可以访问到内网的 web 服务。 -**注:如果 frps 配置了 `subdomain_host`,则 `custom_domains` 中不能是属于 `subdomain_host` 的子域名或者泛域名。** +**注:如果 frps 配置了 `subdomainHost`,则 `customDomains` 中不能是属于 `subdomainHost` 的子域名或者泛域名。** -同一个 HTTP 或 HTTPS 类型的代理中 `custom_domains` 和 `subdomain` 可以同时配置。 +同一个 HTTP 或 HTTPS 类型的代理中 `customDomains` 和 `subdomain` 可以同时配置。 diff --git a/content/zh-cn/docs/Features/tcp-udp/_index.md b/content/zh-cn/docs/Features/tcp-udp/_index.md index a58f849..12ae645 100644 --- a/content/zh-cn/docs/Features/tcp-udp/_index.md +++ b/content/zh-cn/docs/Features/tcp-udp/_index.md @@ -7,12 +7,13 @@ description: > TCP 和 UDP 是 frp 中两种最基础的代理类型,用于代理监听在 TCP 和 UDP 端口的服务。 -```ini -[ssh] -type = tcp -local_ip = 127.0.0.1 -local_port = 22 -remote_port = 6000 +```toml +[[proxies]] +name = "ssh" +type = "tcp" +localIP = "127.0.0.1" +localPort = 22 +remotePort = 6000 ``` 通过 type 指定代理类型。 diff --git a/content/zh-cn/docs/Features/tcpmux/_index.md b/content/zh-cn/docs/Features/tcpmux/_index.md index e966032..cd07a03 100644 --- a/content/zh-cn/docs/Features/tcpmux/_index.md +++ b/content/zh-cn/docs/Features/tcpmux/_index.md @@ -5,40 +5,40 @@ description: > 了解 frp `TCPMUX` 类型的代理。 --- -frp 支持将单个端口收到的连接路由到不同的代理,类似 `vhost_http_port` 和 `vhost_https_port`。 +frp 支持将单个端口收到的连接路由到不同的代理,类似 `vhostHTTPPort` 和 `vhostHTTPSPort`。 目前支持的复用器只有 `httpconnect`。 -当在 `frps.ini` 的 `[common]` 中设置 `tcpmux_httpconnect_port`,frps 将会监听在这个端口,接收 HTTP CONNECT 请求。 +当在 `frps.toml` 中设置 `tcpmuxHTTPConnectPort`,frps 将会监听在这个端口,接收 HTTP CONNECT 请求。 frps 会根据 HTTP CONNECT 请求中的 host 路由到不同的后端代理。 示例配置如下: -```ini -# frps.ini -[common] -bind_port = 7000 -tcpmux_httpconnect_port = 1337 +```toml +# frps.toml +bindPort = 7000 +tcpmuxHTTPConnectPort = 1337 ``` -```ini -# frpc.ini -[common] -server_addr = x.x.x.x -server_port = 7000 - -[proxy1] -type = tcpmux -multiplexer = httpconnect -custom_domains = test1 -local_port = 80 - -[proxy2] -type = tcpmux -multiplexer = httpconnect -custom_domains = test2 -local_port = 8080 +```toml +# frpc.toml +serverAddr = "x.x.x.x" +serverPort = 7000 + +[[proxies]] +name = "proxy1" +type = "tcpmux" +multiplexer = "httpconnect" +customDomains = ["test1"] +localPort = 80 + +[[proxies]] +name = "proxy2" +type = "tcpmux" +multiplexer = "httpconnect" +customDomains = ["test2"] +localPort = 8080 ``` 通过上面的配置,frps 如果接收到 HTTP CONNECT 请求内容: diff --git a/content/zh-cn/docs/Features/xtcp/_index.md b/content/zh-cn/docs/Features/xtcp/_index.md index cf1dad3..b0a424f 100644 --- a/content/zh-cn/docs/Features/xtcp/_index.md +++ b/content/zh-cn/docs/Features/xtcp/_index.md @@ -9,7 +9,7 @@ XTCP 的配置方式和 STCP 很类似。但是会采用 P2P 的方式进行打 由于打洞成功率取决于所处网络的 NAT 类型,所以 XTCP 的可用性和稳定性无法保证。在需要可靠连接的情况下,建议使用 STCP 替代。 -当 visitor 配置了 `keep_tunnel_open = true` 时,frpc 会定期检测隧道是否打开,如果没有,则会尝试打洞建立隧道,这样可以始终保持隧道打开,在需要连接对端服务时,可以避免延迟。 +当 visitor 配置了 `keepTunnelOpen = true` 时,frpc 会定期检测隧道是否打开,如果没有,则会尝试打洞建立隧道,这样可以始终保持隧道打开,在需要连接对端服务时,可以避免延迟。 默认情况下,visitor 会在接收到用户连接后尝试打洞,如果打洞失败,可以尝试多次建立连接,程序会尝试其他的打洞策略,有可能在多次重试后成功打洞。一旦打洞成功,后续新增连接不必重复打洞,而是可以复用隧道。 @@ -19,23 +19,23 @@ XTCP 的配置方式和 STCP 很类似。但是会采用 P2P 的方式进行打 示例配置: -```ini -[stcp-visitor] -role = visitor -type = stcp -server_name = stcp-test -sk = abc -bind_port = -1 - -[xtcp-visitor] -role = visitor -type = xtcp -server_name = xtcp-test -sk = abc -bind_addr = 127.0.0.1 -bind_port = 9002 -fallback_to = stcp-visitor -fallback_timeout_ms = 200 +```toml +[[visitors]] +name = "stcp-visitor" +type = "stcp" +serverName = "stcp-test" +secretKey = "abc" +bindPort = -1 + +[[visitors]] +name = "xtcp-visitor" +type = "xtcp" +serverName = "xtcp-test" +secretKey = "abc" +bindAddr = "127.0.0.1" +bindPort = 9002 +fallbackTo = "stcp-visitor" +fallbackTimeoutMs = 200 ``` 当连接 `127.0.0.1:9002` 超过 200ms p2p 打洞还未成功的话,会回退到使用 stcp-visitor 建立连接。fallback 后,之前触发的打洞操作仍然会继续,一般来说打洞完成需要的耗时会比较长。 @@ -44,4 +44,4 @@ fallback_timeout_ms = 200 需要注意根据访问端和被访问端的延迟情况来合理设置超时时间,以避免超时时间太短,即使打洞成功连接也来不及建立,而一直触发 fallback。 -stcp-visitor 的 `bind_port` 设置为 -1 表示不需要监听物理端口,只接受 fallback 的连接即可。 +stcp-visitor 的 `bindPort` 设置为 -1 表示不需要监听物理端口,只接受 fallback 的连接即可。