清漆 vcl_backend_response 检测 vcl_recv return (散列)

Varnish vcl_backend_response detect vcl_recv return (hash)

在端口 80 上使用 varnish 5.1 设置多个网站时,我不想缓存所有域。 这很容易在 vcl_recv.

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

return(pass);

现在 vcl_backend_response 我想对缓存域做一些处理。

当然我可以做 if( bereq.http.Host == "cache.this.domain.com" ),但是有没有办法知道它是 return(hash) 还是 return(pass) 从 vcl_backend_response?

中调用 vcl_recv

我认为这很有道理,但找不到相关信息。

感谢您的帮助。

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

我认为没有办法直接说明您是如何进入 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" ) ...
}

除了@Daniel V. 建议的临时方法之外,可能适合您需要的替代方法是:

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

这让您仅对可缓存对象执行额外处理。