caddy中怎么添加自定义插件


这期内容当中小编将会给大家带来有关caddy中怎么添加自定义插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先为 caddy 创建一个 插件的 Go Package ,你可以新建一个文件夹达到这个效果。比如这里分为了两个 Go 文件,接下来详细讲每一个 Go 文件的作用。首先我们看到 setup.go创建 setup.go 文件并写入以下信息这里是 建立了一个新插件,caddy 包来做到插件的注册。注意到 “gizmo” 这是 插件的名字,同时也是指令的名字,请为你的插件取一个独一无二的名字吧。(注意:名字需要是单词小写哦。)因为是针对 HTTP 服务器的插件,所以 ServerType 字段值是 “http”另一个设置的字段是 setup ,实际上,我们接下来会填充这个函数的逻辑。它的作用就是将我们插件的处理逻辑安装到 Caddy 中。现在我们来实现 setup 函数

假如我们希望在Caddyfile中有一行这样的行:
我们可以得到刚才所说的 c.Next() 第一个参数(“foobar”)的值,如下所示:我们首先注意到, c.Next() 是真正我们读取 caddyfile 逻辑的地方,caddyfile 就是配置服务器的配置文件的名字。我们注意到,这里的操作实际上是使用 caddy.Controller 来实现的。它的存在 让编写插件的开发者只需要关注如何使用它来执行你的命令,这是一项优秀的设计,有兴趣可以看我的源码阅读部分关于 Plugin 的具体实现。在 Caddy 解析了Caddyfile之后,它将迭代每个指令名(按照服务器类型规定的顺序),并在每次遇到指令名时调用指令的setup函数。setup函数的职责是解析指令的标识并配置自己。

您可以通过遍历c.Next()来解析为指令提供的标识,只要有更多的标识需要解析,那么c.Next()就会返回true。由于一个指令可能出现多次,你必须遍历c.Next()以获得所有出现的指令并使用第一个标识(即指令名)。
有关caddyfile包,请参阅godoc以了解如何更充分地使用分发器,并查看任何其他现有插件。查看httpserver包的godoc。最重要的两种类型是httpserver.Handler和httpserver.Middleware。Handler是一个处理HTTP请求的函数。Middleware是一种连接Handler的方式。Caddy将负责为你设置HTTP服务器的所有簿记(bookkeeping)工作,但是你需要实现这两种类型。
httpserver.Handler是一个几乎和http.Handler完全一样的接口,除了ServeHTTP方法返回(int, error)
这个方法签名遵循Go语言博客中关于与中间件相关的错误处理的建议。
int是HTTP状态码,error应该被处 香港云主机理和/或记录。有关这些返回值的详细信息,请参阅godoc。

Handler通常是一个结构体,至少包含一个Next字段,用来链接下一个Handler
除了这些之外,可以添加一些自己使用的参数,考虑 grpc 的 plugin 实现,解释放在代码块中的注释中这就是参考的一个 字段的使用。可以根据自己的需要,调整在 caddyfile 中读取的指令应该如何配置。为了实现httpserver.Handler接口,我们需要编写一个名为ServeHTTP的方法。这个方法是实际的处理程序函数,除非它自己处理完毕请求,否则它应该调用链中的下一个Handler:即使用g.next.ServeHTTP(w, r)这里只是框架,具体逻辑可以自行填充,可以参照已有的 Plugin 实现。
然后我们可以进行第二步,将这个 handler 注册到整个 caddy 的 http 调用链上。我们需要回到 刚才的 setup.go 文件中,
回到设置函数。你刚刚解析了标识并使用所有适当的配置设置了中间件处理程序:这样,代码部分就全部完成了。下面我们查看需要注意的事项。实际上是关乎于怎样将写好的插件集成在 caddy 中。要做的事情是告诉服务器类型在进程的什么地方执行你的指令。这一点很重要,因为其他指令可能会设置你所依赖的更原始的配置,因此执行指令的顺序不能是随意的。

每个服务器类型都有一个字符串列表,其中每个项都是一个指令的名称。例如,查看HTTP服务器支持的指令列表。将指令添加到适当的位置。
最后,不要忘记导入你的插件包!Caddy必须导入插件来注册并执行它。这通常是在run.go的import部分的尾部完成的:
请注意:包名前的_是必需的。上述就是小编为大家分享的caddy中怎么添加自定义插件了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注开发云行业资讯频道。

相关推荐: docker中怎么安装RabittMQ

这篇文章将为大家详细讲解有关docker中怎么安装RabittMQ,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。搜索RabbitMQ,在搜索结果中选择第一个选择带有management的,带有web管理页,通过…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/27 21:25
下一篇 07/27 21:26

相关推荐