如何为 caddy 添写自定义插件


如何为 caddy 添写自定义插件

项目地址:https://github.com/yhyddr/quicksilver/tree/master/gosample/caddy-plugin


godoc以了解如何更充分地使用分发器,并查看任何其他现有插件。

httpserver包的godoc。最重要的两种类型是httpserver.Handler和httpserver.Middleware。

  1. Handler是一个处理HTTP请求的函数。
  2. 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