mirror of
https://github.com/fatedier/frp.git
synced 2026-05-15 08:05:49 -06:00
[GH-ISSUE #1403] Feature: Server Manage Plugin #1105
Labels
No labels
In Progress
WIP
WaitingForInfo
bug
doc
duplicate
easy
enhancement
future
help wanted
invalid
lifecycle/stale
need-issue-template
need-usage-help
no plan
proposal
pull-request
question
todo
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/frp#1105
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @fatedier on GitHub (Aug 21, 2019).
Original GitHub issue: https://github.com/fatedier/frp/issues/1403
To track design for server manage plugin.
@fatedier commented on GitHub (Dec 2, 2019):
插件
frp 管理插件的作用是在不侵入自身代码的前提下,扩展 frp 服务端的能力。
frp 管理插件会以单独进程的形式运行,并且监听在一个端口上,对外提供 RPC 接口,响应 frps 的请求。
frps 在执行某些操作前,会根据配置向管理插件发送 RPC 请求,根据管理插件的响应来执行相应的操作。
RPC 请求
管理插件接收到操作请求后,可以给出三种回应。
接口
接口路径可以在 frps 配置中为每个插件单独配置,这里以
/handler为例。Request
Response
非 200 的返回都认为是请求异常。
拒绝执行操作
允许且内容不需要变动
允许且需要替换操作内容
操作类型
目前插件支持管理的操作类型有
Login和NewProxy。Login
用户登录操作信息
NewProxy
创建代理的相关信息
frps 中插件配置
addr: 插件监听的网络地址。
path: 插件监听的 HTTP 请求路径。
ops: 插件需要处理的操作列表,多个 op 以英文逗号分隔。
元数据
为了减少 frps 的代码修改,同时提高管理插件的扩展能力,在 frpc 的配置文件中引入自定义元数据的概念。元数据会在调用 RPC 请求时发送给插件。
元数据以
meta_开头,可以配置多个,元数据分为两种,一种配置在common下,一种配置在各个 proxy 中。@fatedier commented on GitHub (Dec 2, 2019):
Manage Plugin
frp manage plugin is aim to extend frp's ability without modifing self code.
It runs as a process and listen on a port to provide RPC interface. Before frps doing some operations, frps will send RPC requests to manage plugin and do operations by it's response.
RPC request
Support HTTP first.
When manage plugin accept the operation request, it can give three different responses.
Interface
HTTP path can be configured for each manage plugin in frps. Assume here is
/handler.Request
Response
Error if not return 200 http code.
Reject opeartion
Allow operation and keep original content
Allow opeartion and modify content
Operation
Now it supports
LoginandNewProxy.Login
Client login operation
NewProxy
Create new proxy
manage plugin configure
addr: plugin listen on.
path: http request url path.
ops: opeartions plugin needs handle.
meta data
Meta data will be sent to manage plugin in each RCP request.
Meta data start with
meta_. It can be configured incommonand each proxy.@mesoar commented on GitHub (Dec 9, 2019):
想请问下这个插件或API目前可以用了吗?
@thofd commented on GitHub (Dec 23, 2019):
支持这个功能早日实现
@fatedier commented on GitHub (Jan 3, 2020):
Supported in v0.31.0.
If anyone want to share your plugin, create an issue on https://github.com/gofrp/plugin .