我想限制可以緩存在varnish和nginx中的對象的大小。跨越限制尺寸的對象應該直接提供給觀看者而不被緩存。varnish/nginx,基於對象大小的緩存決策
在varnish和nginx中實現這一點的最佳方法是什麼?
感謝,
病毒
我想限制可以緩存在varnish和nginx中的對象的大小。跨越限制尺寸的對象應該直接提供給觀看者而不被緩存。varnish/nginx,基於對象大小的緩存決策
在varnish和nginx中實現這一點的最佳方法是什麼?
感謝,
病毒
我猜您正在使用Nginx的都和上光油,其中光油是做實際的緩存。
如果您可以從URL推斷出文件可能太大而無法緩存,那麼如果URL匹配特定模式,則可以很輕鬆地繞過nginx中的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。
清漆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;
}
}