Varnish vcl_backend_response检测vcl_recv返回(哈希)

标签 varnish varnish-vcl

在端口 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"),但是有没有办法知道它是来自 vcl_recv 的 return(hash) 还是 return(pass) 调用在 vcl_backend_response 内?

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

谢谢你的帮助。

最佳答案

确实让我感到奇怪的是,为什么首先需要进行这样的处理。

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

关于 Varnish vcl_backend_response检测vcl_recv返回(哈希),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46027613/

相关文章:

直接在vcl_recv中上光后端主机吗?

varnish - VCL 内置对象到子程序的映射

Varnish 302重定向到后端

在交付对象之前,在 VCL 中 Varnish 类似 S3 的签名的限时请求

php - 带有PHP验证码的Varnish缓存,用于防站点抓取算法

varnish - 如何在varnish中调试VCL?

caching - 无法使用 "service varnish restart"重新启动 Varnish

performance - 为什么提供缓存页面需要一秒钟?

varnish - 使 Varnish 成为代理而不重定向

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