如何在标头中显示nginx缓存文件的年龄

时间:2016-06-28 09:00:46

标签: linux caching nginx

我已经通过CentOS 7上的nginx 1.6.3为站点设置了一个缓存服务器,并且它被配置为将http头添加到服务文件,以显示所述文件是否来自缓存服务器(HIT,MISS或BYPASS) )像这样:

add_header X-Cached $upstream_cache_status;

但是,我想知道是否有办法添加标题来显示缓存文件的年龄,因为我的解决方案设置了proxy_cache_valid 200 60m;,我想检查它是否尊重设置。

所以我正在寻找的是:

add_header Cache-Age $upstream_cache_age;

虽然我找不到任何类型的东西,你能帮忙吗?

由于

3 个答案:

答案 0 :(得分:4)

nginx文档非常详尽 - 缓存文件的直接相对年龄没有变量。

最好的方法是使用$upstream_http_变量类通过Date获取$upsteam_http_date标题来获取资源的绝对年龄。

add_header X-Cache-Date $upstream_http_date;

对于HTTP / 1.1中Date头字段的语义含义,请参考rfc7231#section-7.1.1.2,它将其描述为HTTP响应生成的时间,因此,基本上,这应该完全实现你想要的(特别是如果后端以相同的时间计数器运行)。

答案 1 :(得分:0)

我花了一些时间尝试使用Nginx Perl module解决此问题,$upstream_http_NAME似乎无法访问http://book.varnish-software.com/3.0/HTTP.html#age标题,这样您就可以从代理的时间戳标头成功计算当前时间在渲染时创建的应用程序。

或者,您可以使用不同的缓存层架构,如Varnish Cache,它确实提供了Age HTTP响应头:

10.3

答案 2 :(得分:0)

我使用Lua模块针对以下问题提出了一种适用于此的解决方案:Nginx: Add “Age” header, with Lua. Is this a good solution?

我将在此处发布代码,对于任何建议,最好在另一个链接中进行讨论,在此我会对其进行详细说明。

map $upstream_http_Date $mapdate {
    default $upstream_http_Date; 
    '' 'Sat, 21 Dec 2019 00:00:00 GMT';
}

内部位置:

header_filter_by_lua_block { 
   ngx.header["Age"] = ngx.time() - ngx.parse_http_time(ngx.var.mapdate); 
}