当Traffic Server收到一个web对象的请求,它首先尝试着在缓存中定位该对象。如果该对象在缓存中,Traffic Server将会检查该对象是否仍然有效。对于HTTP对象而言,Traffic Server支持可选的作者自定义的有效期。Traffic Server坚持这些有效期;另外,它在对象被改变的频率和管理员选择的有效期方案之间挑选一个有效期。对象也可以和源服务器一起检查器有效来重新生效。
Traffic Server通过如下的方式来判断缓存中的HTTP对象是否有效:
一些HTTP对象包含Expires头或者max-age头来明确定义对象可以被缓存的时间。Traffic Server通过比较当前时间和有效期时间来决定该对象是否仍然有效。
如果HTTP对象没有Expires头或者max-age头,Traffic Server使用下面的公式来计算对象有效期:
freahness_limit = (date – last_modified) * 0.1
这里的date是对象服务器返回的日期,而last_modified是Last-Modified头部的日期。如果没有Last-Modified头部,Traffic Server就使用对象写入缓存的日期。因子0.1(10%)可以根据需要来增加或减小(见Modifying the Aging Factor for Freshness Computations)。
计算的最大有效期被限制在一个最小值和最大值之间,更多信息见(Setting an Absolute Freshness Limit)。
如果HTTP对象既没有Expires头部也没有Last-Modified和Date头部,Traffic Server使用一个最大和最小有效期(见Setting an Absolute Freshness Limit)。
重新生效规则为特殊的对象提供有效期极值。可以为来自特殊的域或者IP地址的对象,URL中包含指定的正则表达式的对象,来自特殊客户端的对象等(见cache.config)设置有效期极值。
如果一个对象没有包含任何截止信息,Traffic Server可以根据其Last-Modified和Date头部来估计它的有效期。默认地,Traffic Server存储该对象从其上次修改后10%的时间。可以根据需要来增大或减小这个百分比。
为有效期的计算修改老化因子
1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。
2. 编辑下面的变量:
变量 | 描述 |
proxy.config.http.cache.heuristic_lm_factor | 设置这个变量来指定计算有效期的老化因子。Traffic Server存储该对象从其上次修改后这个百分比的时间。默认值为0.1(10%)。 |
3. 保存并关闭records.config文件
4. 定位到Traffic Server的bin目录
5. 运行traffic_line –x命令来应用配置文件的变更。
一些对象既没有Expires头部也没有Last-Modified和Date头部。为了控制这些对象在缓存中的时间,需要指定一个绝对有效期极值。
设置一个绝对有效期极值:
1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。
2. 编辑下面的变量:
变量 | 描述 |
proxy.config.http.cache.heuristic_min_lifetime | 设置这个变量来指定没有截止时间的HTTP对象在缓存中有效期的最小值。默认值为3600秒(1小时)。 |
proxy.config.http.cache.heuristic_max_lifetime | 设置这个变量来指定没有截止时间的HTTP对象在缓存中有效期的最大值。默认值为86400秒(1天)。 |
3. 保存并关闭records.config文件
4. 定位到Traffic Server的bin目录
5. 运行traffic_line –x命令来应用配置文件的变更。
为了更好的确保缓存中对象的有效性,可以配置Traffic Server只缓存有特殊头部的对象。默认地,Traffic Server缓存所有的对象(包括没有头部的对象);可以为专门的代理情况改变默认设置。如果配置Traffic Server只缓存有Expires或者max-age头部的HTTP对象,缓存命中率将会明显下降(因为几乎没有对象有明确的截止信息)。
配置Traffic Server只缓存特殊头部的对象:
1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。
2. 编辑下面的变量:
变量 | 描述 |
proxy.config.http.cache.required_headers | 设置这个变量为下列值之一: 0 = 对头部没有特殊要求 1 = 需要是Last-Modified头部,或者有明确生命期的头部,Expires或者Cache-Control: max-age 2 = 需要明确的生命期,Expires或者Cache-Control: max-age |
3. 保存并关闭records.config文件
4. 定位到Traffic Server的bin目录
5. 运行traffic_line –x命令来应用配置文件的变更。
尽管一个对象在缓存中可能是有效的,但是客户端或者服务器经常强加它们自己的不从缓存中获取对象的约束。比如,一个客户端请求一个对象时可能不通过缓存,即使通过缓存,对象的缓存时间也不能超过10分钟。Traffic Server可以给一个缓存的对象在客户端请求和服务器响应中加上Cache-Control头部。下面的Cache-Control头影响着对象是否可以通过缓存来服务:
Traffic Server在HTTP有效期标准之后使用Cache-Control标准。比如,一个对象可能被认为是有效的,但是如果它的使用期限大于它的max-age,它将不会被服务。
对客户端请求一个在缓存中过期的对象,Traffic Server将重新生效这个对象。重新生效是询问源服务器检查这个对象有没有被修改。重新生效的结果是下面之一:
默认情况下,Traffic Server重新生效一个缓存中对象,如果它认为该对象已经过期。Traffic Server评估对象的有效性已在HTTP Object Freshness中描述。可以选择如下选项之一来重新配置Traffic Server评估有效性的方式:
可以通过在cache.config文件(见cache.config)中设置特殊的重新生效规则来配置Traffic Server重新生效缓存中对象的方式。
配置重新生效选项:
1. 在文本编辑器中打开位于Traffic Server的config目录下的records.config文件。
2. 编辑下面的变量:
变量 | 描述 |
proxy.config.http.cache.when_to_revalidate | 设置这个变量为下列值之一: 0 = 配置Traffic Server重新生效HTTP对象,当它认为该对象在缓存中已过期(如果可以的话,Traffic Servre检查对象头部和有效期极值)。这是默认配置。 1 = 配置Traffic Server重新生效没有Expires或Cache-Control头部的HTTP对象。 2 = 配置Traffic Server总是重新生效HTTP对象;Traffic Server总是认为HTTP对象是过期的。 3 = 配置Traffic Server从不重新生效HTTP对象;Traffic Server总是认为HTTP对象是有效的。 |
3. 保存并关闭records.config文件
4. 定位到Traffic Server的bin目录
5. 运行traffic_line –x命令来应用配置文件的变更。