清漆 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) {
...
}
}
这让您仅对可缓存对象执行额外处理。
在端口 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) {
...
}
}
这让您仅对可缓存对象执行额外处理。