2014-10-01 89 views
-1

我想限制可以緩存在varnish和nginx中的對象的大小。跨越限制尺寸的對象應該直接提供給觀看者而不被緩存。varnish/nginx,基於對象大小的緩存決策

在varnish和nginx中實現這一點的最佳方法是什麼?

感謝,

病毒

回答

0

我猜您正在使用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。

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; 
    } 
} 
相關問題