Varnish 不断缓存我的跟踪软件

标签 varnish varnish-vcl

我的一个网站有一个 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/

相关文章:

Varnish vcl_recv的默认行为

caching - 避免CSRF token

apache - Magento-Varnish 最佳 VCL 配置

ssl - Varnish 3 : "Expected return action name" when using "synth"

varnish - 无法在其他导演中使用Varnish导演

regex - 剥离选择查询字符串属性/值对,以便 Varnish 不会因它们而改变缓存

proxy - 当服务器在 Varnish 反向代理之后(反过来又在负载均衡器之后)时,在apache日志中获取客户端IP地址

Varnish 在刷新期间服务旧对象

varnish - 如何使用supervisord配置ulimit(启动varnish)