我在Apache面前运行symfony2,在Apache面前运行Varnish。我配置了varnish以使用symfony(http://symfony.com/doc/current/cookbook/cache/varnish.html),它工作正常。
现在这是我的问题: 我创建了一个枝条模板,显示当前时间,没有别的。
{{ "now"|date("d/m/Y H:i:s") }}
现在当我重新加载页面时,我看到一个缓存命中(varnishstat),这对我来说有点奇怪,因为我期待错过,因为这是动态内容。
那么我为什么要在这里获得缓存命中?也许有些神奇地添加了ESI标签?
答案 0 :(得分:0)
清漆不知道“动态内容”是什么;它只知道是否要缓存内容的请求,响应和规则(http标头或VCL)。
如果您不想缓存结果,则有2个解决方案:
1:编写特定的VCL告诉Varnish不要缓存:
sub vcl_recv {
if (req.url = "/currentTime.php") {return (pass);}
}
2:更改响应缓存控制标头,告诉Varnish(和Proxies / Browser缓存)不要缓存。我不太了解Symfony,但php提供了必要的工具:
header("Pragma: no-cache");
header("cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
编辑:清漆只需要“缓存控制”标题。
答案 1 :(得分:0)
据我所知,varnish和你的后端服务器分开工作。因此,当一个http请求进入Varnish时,Varnish本身对预期响应的内容一无所知。这意味着“动态内容”与静态内容没有任何区别。也许这就是你对此感到困惑:)