入门TrafficServer插件开发的正确姿势

入门TrafficServer插件开发的正确姿势

–本文转自:纸鸢-可道 可道技术

前言

 普及文章,高手飘过。
发现不少同学刚搞ats插件开发时候经常找不着道。

 举个栗子:


 通过阅读插件代码,发现对ats的处理流程request/respone方向没弄清楚。
如果不先搞清楚简单的流程、request/respone方向问题,会陷入坑中。下面我们一起来看看在搞ats插件之前,我们需要搞清楚什么东西。

正确姿势

一、ats的官方文档&ats的插件example

插件文档:https://docs.trafficserver.apache.org/en/latest/developer-guide/plugins/index.en.html

官方example: https://github.com/apache/trafficserver/tree/master/example

文档主要看什么

1.1 Hooks

 ats给插件提供了什么Hook起码要了解下,在什么Hook能干嘛要了解下。
Hook这个章节最重要的差不多是下面这章图了:

一开始最重要的几个Hook应该是4个:

  • TS_HTTP_READ_REQUEST_HDR_HOOK :接收客户端请求
  • TS_HTTP_SEND_REQUEST_HDR_HOOK : 发送请求给源
  • TS_HTTP_READ_RESPONSE_HDR_HOOK :读取源的响应
  • TS_HTTP_SEND_RESPONSE_HDR_HOOK :发送响应给客户端

这4个Hook都跟request/respone方向有关,一旦还没弄清楚这个点,去看ts.h提供的Api就乱套了,完全对应不上在哪里该使用什么。

1.2 Headers

 这个不用多解释了,刚开始搞插件从处理Header开始是最常见也是最好入手的,得看看。
建议对照着example看:
https://github.com/apache/trafficserver/tree/master/example/replace-header

https://github.com/apache/trafficserver/tree/master/example/add-header

1.3 Transformations

Transform是修改响应内容的地方,很关键,有点难度。需要修改数据的得看这个地方。

对照example:
https://github.com/apache/trafficserver/tree/master/example/append-transform

https://github.com/apache/trafficserver/tree/master/example/bnull-transform

https://github.com/apache/trafficserver/tree/master/example/null-transform

https://github.com/apache/trafficserver/tree/master/example/server-transform

1.4 插件常用接口

1.5 介绍的例子

看看文档介绍的例子跟对照example代码:
https://github.com/apache/trafficserver/tree/master/example

如果上面的内容都看完了还不过瘾,那可以看官方正式plugins代码:

https://github.com/apache/trafficserver/tree/master/plugins

https://github.com/apache/trafficserver/tree/master/plugins/experimental

阅读所有提供的Api

https://github.com/apache/trafficserver/blob/master/proxy/api/ts/ts.h

所有提供给插件使用的Api方法都在这里面了。

这些Api方法的实现在于:
https://github.com/apache/trafficserver/blob/master/proxy/InkAPI.cc

连这些都知道了,是不是自己添加Api方法都可以了。

如果上面那些看的还不过瘾,那可以看看数据结构资料。

数据结构资料

http://people.apache.org/~amc/ats/doc/html/classHttpRequestData.html
上面链接是Request的数据结构图,还可以自己点去看其他的,太多了。

回来看前言的问题

 假设现在都已经把request/respone方向都搞清楚了,我们现在回来看前言提到的同学问的问题。
主要是想获取响应的内容。

 我们先来看看Hook挂载的对不,代码中挂载的Hook是TS_HTTP_SEND_RESPONSE_HDR_HOOK,发送响应的位置,都准备发响应给客户端了,那肯定是已经能获取到响应内容的了。

 Hook点没有问题,我们接着看方法,代码使用的是TSHttpTxnServerReqGet,
再看问题:

都是Req相关的,Req是啥,是Request,是请求方向。很明显了。是要获取响应内容,用请求方向的方法能获取到么?

 我们拿他用的这个方法去ts.h查询下(见下图),可以看到每个Req方法附近都有一个Resp的对应方法,Resp就是Response,响应方法的方法。

最后改对方向的方法解决了问题。

我们并不是为了解决这么一个问题,而是想说明我们应该先把什么内容整理清晰,尽量不要盲搞。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要检查Traffic Server的配置是否正确可以采取以下步骤: 1. 确认Traffic Server已经正确安装并正在运行。 2. 检查Traffic Server的配置文件(通常是 /etc/trafficserver/trafficserver.conf)是否正确配置。可以使用 traffic_line 命令来检查配置文件。例如,输入以下命令来检查是否存在名为 proxy.config.http.server_ports 的配置: ``` traffic_line -r proxy.config.http.server_ports ``` 如果此命令返回一个值,则说明该配置已经存在。 3. 检查Traffic Server的访问控制列表(ACL)是否正确配置。ACL通常用于限制对Traffic Server的访问。可以使用 traffic_line 命令来检查ACL配置。例如,输入以下命令来检查是否存在名为 proxy.config.http.referer_filter.enable 的配置: ``` traffic_line -r proxy.config.http.referer_filter.enable ``` 如果此命令返回一个值,则说明该配置已经存在。 4. 检查Traffic Server的缓存设置是否正确配置。Traffic Server使用缓存来提高性能。可以使用 traffic_line 命令来检查缓存配置。例如,输入以下命令来检查是否存在名为 proxy.config.cache.ram_cache.size 的配置: ``` traffic_line -r proxy.config.cache.ram_cache.size ``` 如果此命令返回一个值,则说明该配置已经存在。 5. 检查Traffic Server的日志设置是否正确配置。Traffic Server会将访问日志和错误日志写入日志文件。可以使用 traffic_line 命令来检查日志配置。例如,输入以下命令来检查是否存在名为 proxy.config.log.hostname 的配置: ``` traffic_line -r proxy.config.log.hostname ``` 如果此命令返回一个值,则说明该配置已经存在。 如果以上步骤都没有发现问题,则Traffic Server的配置应该是正确的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值