我的一个网站有一个 Varnish 设置。我正在使用开源软件 Piwik 进行统计跟踪。
Piwik 可以选择使用代理进行跟踪,这意味着 Piwik 的 URL 不会在我的源代码中显示。基本上它是一个 PHP 文件,位于我的 wordpress 安装中,它将 CURL 帖子发送到我的 Piwik 安装......
现在,我使用以下方法设置 Varnish :
https://github.com/mattiasgeniar/varnish-3.0-configuration-templates
在 vcl_fetch 我添加:
if (req.url ~ "piwik") {
set beresp.ttl = 120s;
return (hit_for_pass);
}
在 vcl_recv 我添加:
if (req.url ~ "piwik") {
return (pass);
}
发生的情况是,我只看到网站上实际拥有的流量的 50%...
恐怕是因为我的 vcl_fetch 设置...
我阅读了 pass 和 hit_for_pass 之间的区别,据我所知 beresp.ttl 是一个配置,我指导 Varnish 继续执行 120 秒
还有一件事,WP 上的 W3TotalCache 向我的 piwik.php 文件添加了一些缓存 header ,例如 Max-Age & expires。如果没有 Varnish,它仍然可以正常工作并正确跟踪。 Varnish 和那些标题之间是否可能存在某种冲突?
我做对了吗?
为什么你认为我的跟踪有 50% 被遗漏了?
谢谢。
最佳答案
vcl_recv中用于传递的Varnish配置正确。
您可以删除vcl_fetch中的代码,由于recv中的代码,此时它没有任何区别。
请记住,任何用于过滤vcl_fetch中响应头的VCL代码也将针对传递的响应运行。我猜您正在过滤piwik发送的Set-Cookie。
关于Varnish 不断缓存我的跟踪软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19769463/