我正在尝试创建一个刷新响应头,这将帮助我调试缓存的状态。我想要创建一个头,它将显示请求所经过的数据中心和对象的年龄。类似于:
X-Fastly-Age: VIE:2311s FRA:0s这意味着对象被缓存在VIE数据中心(屏蔽)中,并且在FRA边缘必须从VIE中获取。
第二个请求将返回如下内容:
X-Fastly-Age: VIE:2311s FRA:133s我试着设置这个:
set beresp.http.X-Fastly-Age = beresp.http.X-Fastly-Age " " req.http.edge-geo-datacenter ":" obj.entered;这是可行的,但问题是:
不能用
beresp.http编写vcl_hitobj.entered在vcl_fetch中不可用
因此,基本上,我似乎没有地方来生成这个标题。
如何才能做到这一点?
编辑:
我成功地在vcl_deliver中运行了这个
set resp.http.X-Fastly-Age = resp.http.X-Fastly-Age " " server.datacenter ":" obj.entered;得到:
> x-fastly-age: (null) DCA:0.001 FRA:0.001它受到两件事的影响:
(null) --如果头部为null,是否有一种方法可以不将头放在前面?0.001上。因此,即使使用obj.entered,它似乎也是缓存的,并且不会改变??。
发布于 2021-04-19 11:16:58
我将纯粹从清漆的角度来处理这个问题,因为我没有快速的经验。
清漆使用自动设置的Age标头来确定缓存中对象的年代。
对于非缓存对象,Age响应头的值始终为零。非零值相应地表示对象的年龄。
对于您要得到的null值:我们可以使用if/else语句来解决这个问题。
这是给你的一些VCL:
sub vcl_deliver {
if(resp.http.X-Fastly-Age) {
set resp.http.X-Fastly-Age = resp.http.X-Fastly-Age + " " + server.datacenter + ":" + resp.http.Age;
} else {
set resp.http.X-Fastly-Age = server.datacenter + ":" + resp.http.Age;
}
}https://stackoverflow.com/questions/67141626
复制相似问题