【问题标题】:Varnish: cache only specific domainVarnish:仅缓存特定域
【发布时间】:2011-04-13 06:52:24
【问题描述】:

我一直在积极地谷歌搜索,但没有运气。

我在使用 Varnish 时效果很好,但我想在单个服务器 (Apache) 上托管多个网站,而不用 Varnish 缓存所有网站。

我可以通过 URL 指定要缓存的网站吗?

谢谢

【问题讨论】:

    标签: performance apache dns varnish


    【解决方案1】:

    对于清漆 4

    用 hash

    替换查找

    default.vcl:

    sub vcl_recv {
      # dont cache foo.com or bar.com - optional www
       if (req.http.host ~ "(www\.)?(foo|bar)\.com") {
         return(pass);
       }
      # cache foobar.com - optional www
       if (req.http.host ~ "(www\.)?foobar\.com") {
         return(hash);
       }
    }
    

    【讨论】:

      【解决方案2】:

      是的,

      在 vcl_recv 中,您只需匹配您希望 不 缓存并传递它们的主机。像这样的东西(未经测试):

      vcl_recv {
         # dont cache foo.com or bar.com - optional www
         if (req.host ~ "(www)?(foo|bar).com") {
           return(pass);
         }
      }
      

      【讨论】:

      • @CamiloFlores 您应该回滚并将您的编辑作为新答案发布(或对此帖子发表评论)
      • 永远不要使用管道,当您有多个后端和/或保活连接且任何标头都由清漆处理时,这是一场噩梦
      • 我不知道为什么我在这里做了一个返回(管道)。很抱歉造成混乱。
      • 我试过了,清漆没有启动。为什么要发布未经测试的信息?
      • 你错过了sub vcl_recv 和req.http.host
      【解决方案3】:

      (在评论后编辑)它是req.http.host,所以在你的vcl文件(例如default.vcl)中:

      sub vcl_recv {
        # dont cache foo.com or bar.com - optional www
         if (req.http.host ~ "(www\.)?(foo|bar)\.com") {
           pass;
         }
        # cache foobar.com - optional www
         if (req.http.host ~ "(www\.)?foobar\.com") {
           lookup;
         }
      }
      

      在 varnish3-vcl 中:

      sub vcl_recv {
        # dont cache foo.com or bar.com - optional www
         if (req.http.host ~ "(www\.)?(foo|bar)\.com") {
           return(pass);
         }
        # cache foobar.com - optional www
         if (req.http.host ~ "(www\.)?foobar\.com") {
           return(lookup);
         }
      }
      

      【讨论】:

      • 太好了,我认为这是正确的方向。但不是req.http.host吗? varnish-cache.org/trac/wiki/VCL
      • 你是对的,谢谢!它是 req.http.host(和 req.url)。我在示例中修复了它。
      • 您是否有明确传递 foo 和 bar 域,或者仅查找想要的域?也就是说,定义一个白名单就够了吗?
      • 如果您只定义了一个白名单或黑名单(即,您没有通过诸如 pass、lookup 等操作退出您自己的 vcl_recv 函数),则应用 vcl_recv 的默认行为.请在varnish-cache.org/trac/wiki/VCLExampleDefault 阅读相关内容并研究 default.vcl。要回答您的问题:是的,您必须通过它们。如果您没有明确传递 foo 和 bar 域,并且您的 GET 或 HEAD 请求不包含 auth 或 cookie 标头,则会被查找。
      • 这适用于 Varnish 2。您应该更新您的答案以包含 Varnish 3 代码,即返回(通过)和返回(管道)。
      猜你喜欢
      • 1970-01-01
      • 2017-02-22
      • 2020-07-05
      • 1970-01-01
      • 2014-02-07
      • 2012-03-09
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      相关资源
      最近更新 更多