2017-07-14 23 views
0

我使用清漆4.0.3作爲反向代理緩存和負載平衡器。
我想避免清漆緩存的鏈接以/api/v1/開頭,或者鏈接中包含feed的任何鏈接,並直接向後端服務器提供請求。 我已經這樣做了:清除不使用特定字詞緩存網址

 
sub vcl_recv { 
    if ((req.url ~ "^/api/v1/" || req.url ~ "feed") && 
     req.http.host ~ "api.example.com") { 
     set req.backend_hint = apis.backend(); 
    } 

但基於訪問日誌,它提供從後端的第一個請求,然後將其供應來自清漆直接在新的請求!我做錯了什麼?或者還有什麼我需要做的?

回答

1

它應該是:

sub vcl_recv { 
    if ((req.url ~ "^/api/v1/" || req.url ~ "feed") 
     && req.http.host == "api.example.com") { 
     return (pass); 
    } 
} 

return (pass)將切換清漆通過模式匹配請求。在傳遞模式下,Varnish既不會將結果放到緩存中,也不會從緩存中傳遞(總是與後端對話)。

一種微優化是匹配req.http.host使用==算子。正則表達式匹配在這種情況下不是真的需要。