4

我们使用 varnish 4 来缓存和处理 ESI。对于返回 5XX 后端错误的 ESI 请求,我们返回一个空的合成响应。

该空响应应该被缓存几秒钟,因为当前对同一 ESI 的每个后续请求都会再次命中后端。每当 5XX 响应的原因是昂贵的原因时,这都会导致我们的后端负载过重。

sub vcl_backend_error {
    ....
    if (isAnESI && beresp.status >= 500 && beresp.status <= 599) {
        synthetic({""});

        return(deliver);
    }
}

我们试图Retry-After在响应中添加一个标头,但这并不能解决问题。

set beresp.http.Retry-After = "5";
4

0 回答 0