我想限制可以在varnish和nginx中缓存的对象的大小。跨越受限制大小的对象应该直接提供给查看者而不进行缓存。
在varnish和nginx中实现这一目标的最佳方法是什么?
谢谢,
病毒
答案 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。