拓冰建站拓冰建站
首页 / 资讯中心 / 正文

frp 如何不重启 frpc 热加载代理配置并用 verify 检查配置错误

frp 如何不重启 frpc 热加载代理配置并用 verify 检查配置错误【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frpfrpc 已经在运行、流量正在转发时新增一个代理、修改remotePort或删掉旧代理通常意味着重启客户端进程。frp 提供了热加载机制frpc reload子命令向正在运行的 frpc 实例内置的管理 HTTP API 发起请求由 frpc 按修改后的配置文件创建、更新或删除代理进程无需停止而frpc verify可以不启动 frpc 就对配置文件做静态检查在 reload 之前就发现字段取值错误、feature gate 未启用这类问题。适用环境已有一个基于 TOML / YAML / JSON 格式配置运行中的 frpc 部署INI 格式已弃用。本文围绕“改配置 → verify 校验 → reload 热加载 → status 确认生效”这一条完整路径展开。前置条件在 frpc.toml 中启用 webServer热加载依赖 frpc 的 HTTP APIwebServer字段是启用该 API 的必要配置README 原文ThewebServerfields are required for enabling HTTP API# frpc.toml webServer.addr 127.0.0.1 webServer.port 7400参考配置 conf/frpc_full_example.toml 中还提供了可选的webServer.user和webServer.password用于给管理 API 开启 Basic Auth配置后frpc reload、frpc status会读取同一份配置文件自动携带凭据调用 API。如果当前 frpc 启动时没有配置webServer需要先补上以上配置并启动一次 frpc——这一次启动是必须的之后的代理配置变更才都能免重启热加载。未配置webServer.port时直接执行 reload 会报web server port should be set if you want to use this feature修改代理配置直接编辑frpc.toml中的[[proxies]]块。以仓库默认样例 conf/frpc.toml 为基础假设把test-tcp的远程端口从 6000 改为 6001并新增一个 http 代理# frpc.toml serverAddr x.x.x.x serverPort 7000 webServer.addr 127.0.0.1 webServer.port 7400 [[proxies]] name test-tcp type tcp localIP 127.0.0.1 localPort 22 remotePort 6001 [[proxies]] name web type http localIP 127.0.0.1 localPort 80 customDomains [www.example.com]示例中x.x.x.x是 README 使用的占位写法替换为你的 frps 公网 IP。删除代理同理删掉对应的[[proxies]]块即可。用 verify 检查配置错误修改后先在本地执行校验frpc verify -c ./frpc.toml配置无错时输出frpc: the configuration file ./frpc.toml syntax is ok有错时 verify 打印具体错误并以退出码 1 结束。项目 e2e 测试 test/e2e/v1/basic/cmd.go 中覆盖了两类真实案例写入transport.protocol invalid这类不合法取值时输出不包含syntax is ok在 cmd/frpc/sub/verify_test.go 中设置了virtualNet.address但没开featureGates { VirtualNet true }verify 报VirtualNet feature is not enabled。配置存在告警非错误时会先打印WARNING: ...再打印 syntax is 行退出码仍为 0。verify 走的验证逻辑与 frpc 启动时执行的静态校验是同一套均调用validation.ValidateAllClientConfig见 cmd/frpc/sub/verify.go 与 cmd/frpc/sub/root.go。执行热加载校验通过后执行frpc reload -c ./frpc.toml这条命令并不会在本进程内重读配置文件而是用-c指定文件中的webServer.addr、webServer.port及凭据向正在运行的 frpc 实例的管理 API 发请求因此-c必须指向运行中实例使用的那份配置。成功时输出reload successREADME 的建议是执行后等待约 10 秒让 frpc 完成代理的创建、更新或删除。管理 API 调用的默认超时为 30 秒可通过--api-timeout参数调整见 cmd/frpc/sub/admin.go。用 status 确认生效热加载成功不等于每个代理都按预期注册。等待片刻后执行frpc status -c ./frpc.toml输出以Proxy Status...开头然后按类型大写如 TCP分组的表格列出每个代理列包括 Name、Status、LocalAddr、Plugin、RemoteAddr、Error。新增的代理应出现在表中Error 列非空即该代理的问题原因。项目 e2e 测试 test/e2e/v1/basic/client.go 用真实流量验证过 reload 后的行为修改后的新remotePort可连通旧端口和已删除的代理不再可达。限制与注意事项reload 只同步代理与访问者配置除start外的全局客户端参数不会被修改README 原文global client parameters wont be modified except start。也就是说在文件里改了serverAddr、auth、transport等全局参数再执行 reload运行中的进程不会改变。start是在配置文件、includes、Store 合并之后生效的全局白名单非空时任何未列出的代理或 visitor 都不会启动包括通过 Store API 创建的。frp 建议改用每个代理/visitor 的enabled字段并让start保持为空。--strict_config默认开启配置中出现未知字段会直接报错verify 和 reload 都受此影响。管理端点上/healthz不需要鉴权其余/api/路由受鉴权中间件保护配置了webServer.user/password时未带凭据的访问返回 401e2e 测试 test/e2e/v1/basic/client.go 中的 healthz 用例验证了这一点。如果需要脚本化触发热加载可以直接调用 HTTP 接口GET /api/reload、GET /api/status、PUT /api/config路由定义见 client/api_router.go。可选路径不动文件也能改代理如果不想每次编辑配置文件frpc 还支持通过 Web UI 或 API 在运行时动态创建、更新、删除代理与 visitor。开启方式是配置store.path指定持久化文件[store] path ./db.json通过 Store 管理的代理会保存到磁盘并在 frpc 重启后自动恢复与配置文件中的条目同名时Store 条目优先。对于一次性变更“改文件 verify reload” 仍是文档给出的默认路径。【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门