varnish / nginx,基于对象大小的缓存决策

时间:2014-10-01 13:09:27

标签: nginx varnish

我想限制可以在varnish和nginx中缓存的对象的大小。跨越受限制大小的对象应该直接提供给查看者而不进行缓存。

在varnish和nginx中实现这一目标的最佳方法是什么?

谢谢,

病毒

2 个答案:

答案 0 :(得分:2)

清漆4.1:

您可以使用' std'来实现这一目标。 VMOD。

将此添加到您的vcl配置:

import std;

然后您可以使用它,例如:

sub vcl_backend_response {
  # Increase TTL for files > 5 MB
  if (std.integer(beresp.http.Content-Length, 0) > 5242880) {
    set beresp.ttl = 4w;
  }
}

答案 1 :(得分:0)

我猜你正在使用Nginx和Varnish Varnish正在进行实际的缓存。

如果您可以从URL推断文件可能太大而无法缓存,那么如果URL与特定模式匹配,则可以从nginx绕过Varnish。

当请求被发送到Varnish时,您可以执行以下操作:

sub vcl_recv {
  // Don't cache files larger than 10M
  if (beresp.http.Content-Length ~ "[0-9]{7,}") {
    return (hit_for_pass);
  }
}

所有标题值都是字符串,这使得无法使用像>这样的比较运算符和<。在这种情况下,最大大小为9.999.999的对象由高速缓存提供,其他对象从后端服务器发送而不进行高速缓存。如果你想要一个超过10M的数字,你需要使用正则表达式来创造。我假设Varnish 3.0。