如何排除缓存特殊页面(Varnish)?

时间:2015-10-13 13:38:31

标签: varnish varnish-vcl

我是VCL规则的新手。 我想排除特殊页面被varnish cache缓存。

我真正想做的是排除所有缓存的网址,其中包含特定的查询字符串" query =(数字介于1和100之间)"

此代码仅适用于一个特定查询。

sub vcl_recv {
  # don't cache these special pages
  if (req.url ~ "query=100") {
          return(pass);
  }
}

我只是想确保此规则适用于1-100的整个范围,对吗?

sub vcl_recv {
  # don't cache these special pages
  if (req.url ~ "query=[0-9]") {
          return(pass);
  }
}

或者我必须这样做吗?

sub vcl_recv {
  # don't cache these special pages
  if (req.url ~ "query=1||query=2||...||query=99||query=100") {
          return(pass);
  }
}

1 个答案:

答案 0 :(得分:0)

我不知道Varnish是否支持花括号,如果有,你应该做类似的事情:

sub vcl_recv {
  # don't cache these special pages
  if (req.url ~ "query=([0-9]{1,2}|100)") {
    return(pass);
  }
}

顺便说一句,这个正则表达式匹配“query = 990”。我不知道你的网址是如何编写的,但你应该添加一些东西以避免它(如果你真的需要)。

例如,如果还有其他参数:

sub vcl_recv {
  # don't cache these special pages
  if (req.url ~ "query=([0-9]{1,2}|100)&") {
    return(pass);
  }
}

或者万一它是网址中的最后一个参数:

sub vcl_recv {
  # don't cache these special pages
  if (req.url ~ "query=([0-9]{1,2}|100)$") {
    return(pass);
  }
}