如何为 caddy 添写自定义插件
如何为 caddy 添写自定义插件
项目地址:https://github.com/yhyddr/quicksilver/tree/master/gosample/caddy-plugin
godoc以了解如何更充分地使用分发器,并查看任何其他现有插件。
httpserver包的godoc。最重要的两种类型是httpserver.Handler和httpserver.Middleware。
Handler
是一个处理HTTP请求的函数。Middleware
是一种连接Handler
的方式。
Caddy将负责为你设置HTTP服务器的所有簿记(bookkeeping)工作,但是你需要实现这两种类型。
关于与中间件相关的错误处理的建议。int
是HTTP状态码,error
应该被处理和/或记录。有关这些返回值的详细信息,请参阅godoc。
Handler
通常是一个结构体,至少包含一个Next
字段,用来链接下一个Handler
:
type gizmoHandler struct {
next httpserver.Handler
}
除了这些之外,可以添加一些自己使用的参数,考虑 grpc 的 plugin 实现,解释放在代码块中的注释中
type server struct {
backendAddr string // 监听地址
next httpserver.Handler // 作为中间件必须有的字段
backendIsInsecure bool // 是否启用 Insecure() 选项,是 grpc 的一项配置
backendTLS *tls.Config // 关于 TLS 的使用的证书文件
wrappedGrpc *grpcweb.WrappedGrpcServer // 通过 grpcweb 的 协议实现 HTTP 请求等
}
这就是参考的一个 字段的使用。可以根据自己的需要,调整在 caddyfile 中读取的指令应该如何配置。
HTTP服务器支持的指令列表。将指令添加到适当的位置。
run.go的import
部分的尾部完成的:
_ "your/plugin/package/here"
请注意:包名前的_
是必需的。
https://github.com/yhyddr/quicksilver/tree/master/gosample/caddy-plugin
同时记得多多寻找别人的插件实现方式,你会找到让你耳目一新的实现。https://www.yuque.com/fengyfei/idznuk/sumapn
https://github.com/caddyserver/caddy/wiki/Writing-a-Plugin:-Directives
https://github.com/caddyserver/caddy/wiki/Writing-a-Plugin:-Server-Type
https://github.com/caddyserver/caddy/wiki/Writing-a-Plugin:-HTTP-Middleware