【问题标题】:Varnish not to cache urls with specific word清漆不缓存带有特定单词的网址
【发布时间】:2017-07-14 14:14:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: load-balancing varnish


    【解决方案1】:

    应该是:

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

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

    一种微优化是使用== 运算符匹配req.http.host。在这种情况下,并不真正需要正则表达式匹配。

    【讨论】:

      猜你喜欢
      • 2013-12-28
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2017-02-22
      • 2016-02-12
      • 2016-04-19
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多