我們正在緩存有問題的IIS服務器,它有時只是發送空響應(0字節)而不是正確響應。緩存這些響應將是一場災難,我們無法解決問題,因爲它不是我們的服務器。相反,我想指示Varnish不緩存來自後端的響應(如果它們爲空)(0字節)。是否可以根據Varnish中後端響應的大小來防止緩存?
閱讀VCL參考文獻(https://www.varnish-cache.org/docs/4.0/reference/vcl.html)我看不出任何明顯的解決方法。
可以這樣做嗎?
我們正在緩存有問題的IIS服務器,它有時只是發送空響應(0字節)而不是正確響應。緩存這些響應將是一場災難,我們無法解決問題,因爲它不是我們的服務器。相反,我想指示Varnish不緩存來自後端的響應(如果它們爲空)(0字節)。是否可以根據Varnish中後端響應的大小來防止緩存?
閱讀VCL參考文獻(https://www.varnish-cache.org/docs/4.0/reference/vcl.html)我看不出任何明顯的解決方法。
可以這樣做嗎?
響應的大小應作爲HTTP標頭提供。
例子(vcl_backend_response
):
if (beresp.http.Content-Length == "0") {
return(retry); # Retries the request
}
或:
if (beresp.http.Content-Length == "0") {
beresp.uncacheable = true; # Prevents object from being cached
}
如果你想使用它作爲一個整數,看是否大於或小於值,使用std。
import std;
if (std.integer(beresp.http.content-length, 0) < 500) {
#logic here
}