清漆不要使用特定单词缓存网址

时间:2017-07-14 14:14:21

标签: load-balancing varnish

我使用varnish 4.0.3作为反向代理缓存和负载均衡器 我希望避免对以/api/v1/开头的链接或其链接中包含feed的任何链接进行清除缓存,并直接从后端服务器提供请求。 我这样做了:

sub vcl_recv {
    if ((req.url ~ "^/api/v1/" || req.url ~ "feed") &&
        req.http.host ~ "api.example.com") {
        set req.backend_hint = apis.backend();
    }

但是基于访问日志,它提供来自Backend的第一个请求,然后它直接提供来自varnish的新请求!我做错了什么?或者还有什么我需要做的吗?

1 个答案:

答案 0 :(得分:1)

应该是:

sub vcl_recv {
    if ((req.url ~ "^/api/v1/" || req.url ~ "feed") 
      && req.http.host == "api.example.com") {
        return (pass);
    }
}

return (pass)会将Varnish切换为匹配请求的传递模式。在传递模式下,Varnish既不会将结果放入缓存,也不会从缓存中传递(总是与后端进行对话)。

某种类型的微优化使用req.http.host运算符匹配==。在这种情况下,不需要正则表达式匹配。