首页 > 插件开发 > 缓存时间控制插件(正向)cache_control.c

缓存时间控制插件(正向)cache_control.c

2013年12月18日     浏览数:2,912 发表评论 阅读评论

ats自带的cache.config不适合正向使用,当使用其ttl配置的时候会把range请求也当完整文件缓存,以致后续出现用户请求到非完整文件的错误。

因此我们自己写了个修改max-age的插件。可以通过域名、配合状态码来对缓存进行控制。

代码下载地址:https://github.com/acache/stateam_trafficserver/tree/master

编译安装

tsxs -c cachecontrol.c -o cachecontrol.so

复制cachecontrol.so和cachecontrol.config配置文件到ats的插件目录下

配置plugin.config添加cachecontrol.so即可

cachecontrol.config配置方式

@dest_domain=.* @suffix=jpg|gif|png|flv|mp4|f4v|rar|zip|exe|iso|xls|doc|docx|xlsx|pdf @status=200 @maxage=5184000 

@dest_domain=.* @suffix=.* @status=404 @maxage=120

由于加个@有助于代码处理,所以就这样做了。可以用#号进行注释。

说明

dest_domain、suffix是必须的,status默认是200,maxage默认是86400

由于缓存代理服务器之间会继承age,会导致修改max-age不成功,所以代码中把源返回的header中的date字段删除。

另外

建议配合ats如下选项使用

traffic_line -s proxy.config.http.cache.required_headers -v 2

traffic_line -s proxy.config.http.cache.heuristic_max_lifetime -v 17280000

traffic_line -x

注意

cache.config的配置会覆盖此插件功能,如果使用此插件建议就不用使用cache.config了,除非你已经很清楚它们之间的影响关系。

proxy.config.http.cache.heuristic_max_lifetime上面这项的值要设置得不比你设置的maxage小。上面我们设置的是200天。

关键代码说明

define SUFFIXCOUNT  20   //设置每条配置最多可以匹配多少个文件后缀
define PATTERNCOUNT 20   //设置最多可以有多少条配置

总结心得

在测试过程当中,发现响应给客户端的Age会受源服务器响应的Date的影响,经计算响应给客户端的Age刚好等于响应给客户端的时间和源服务器Date的时差,所以导致max-age不能够实时控制缓存的时间;最后和纸鸢同学经过研究通过删除源服务器响应的Date和Age,然后再插入max-age的方法就可以实时控制缓存的时间了。

分类: 插件开发 标签:
  1. info
    2014年3月7日11:24 | #1

    这个插件好….

  2. 插件加载不成功
    2014年5月30日13:53 | #2

    [May 30 15:22:48.287] Server {0x2b7f146058c0} WARNING: Could not add rule at line #242; Aborting!
    [May 30 15:22:48.287] Server {0x2b7f146058c0} WARNING: [ReverseProxy] Can’t find “TSRemapInit” function in remap plugin “/usr/local/ats/libexec/trafficserver/cachecontrol.so” at line 242
    [May 30 15:22:48.287] Server {0x2b7f146058c0} WARNING: something failed during BuildTable() — check your remap plugins!
    [May 30 15:22:48.287] Server {0x2b7f146058c0} WARNING: Can not load the remap table, exiting out!

    插件加载不成功 ,不知道是什么问题

  1. 本文目前尚无任何 trackbacks 和 pingbacks.