Varnish vcl_backend_response检测vcl_recv返回(哈希)

时间:2017-09-03 20:35:27

标签: varnish varnish-vcl

在端口80上使用清漆5.1的多个网站设置中,我不想缓存所有域。 这很容易在vcl_recv中完成。

if ( req.http.Host == "cache.this.domain.com" ) {
    return(hash);
}

return(pass);

现在在vcl_backend_response中我想对缓存域进行一些处理。

当然,我可以这样做(bereq.http.Host ==" cache.this.domain.com"),但有没有办法知道它是一个返回(哈希)还是一个vcl_backend_response中的vcl_recv中的return(pass)调用?

我认为这可能有意义,但无法找到信息。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

除了@Daniel V.建议的临时方法之外,另一种可能符合您需求的方法是:

sub vcl_backend_response {
    if (!bereq.uncacheable) {
        ...
    }
}

这样,您只能对可缓存的对象执行额外处理。

答案 1 :(得分:0)

这让我想知道为什么你首先需要这样的处理。

我认为没有办法直接告诉你如何进入vcl_backend_response。所以我想你可以设置一个标志并稍后检查,即:

sub vcl_recv {
    if ( req.http.Host == "cache.this.domain.com" ) {
        set req.http.return_type = "hash";
        return(hash);
    }
    set req.http.return_type = "pass";
    return(pass);
}

sub vcl_backend_response {
    if( bereq.http.return_type == "pass" ) ...
}