我已将 Varnish 4.0 添加到运行 cPanel 的 CentOS 6 服务器,以缓存我开发的网站。我正在尝试实现stale-while-revalidate
以确保向所有用户提供页面的缓存版本,这样如果max-age
2 分钟的期限已过,则返回页面的过时副本就足以满足 3 个月的期限,并且服务器将在后台根据需要重新生成缓存对象。
返回的一组示例响应标头如下:
Accept-Ranges:bytes
Age:539
Cache-Control:public, max-age=120, stale-while-revalidate=7889220
charset:utf-8
Connection:keep-alive
Content-Length:54511
Content-Type:text/html; charset=utf-8
Date:Mon, 14 Sep 2015 12:52:00 GMT
Expires:Mon, 14 Sep 2015 12:54:01 GMT
grace:7889220s
Pragma:cache
X-Cache:HIT
X-Cache-Hits:2
这种机制似乎在一定程度上是有效的。在上述情况下,会返回缓存的副本,并且下一个请求会正确返回一个副本,其中将Age
设置为 10(例如,自后台重置缓存以来已过去 10 秒)。但是,在未来的某个时间点(以小时为单位),对同一页面的请求会导致缓存未命中,并且页面似乎直接命中后端,响应标头指示为Age
0。我不知道为什么不返回过时的副本。
我对 Varnish 不太熟悉,我正在使用Mattias Geniar 编写的 Varnish 4.0 模板示例,已针对 Craft CMS 进行了修改(该网站建立于一个 PHP CMS 上)。
VCL 文件中是否存在任何可能导致缓存未命中的内容,或者这可能是服务器配置问题?