清漆 4:如果 beresp.status 出错,则提供优雅的对象?

varnish 4: serve graced object if beresp.status is an error?

有没有办法改变后端响应和交付之间交付给客户端的内容?

我正在尝试找出一种方法,在后端 return 是 4xx 或 5xx 响应(未缓存)的情况下继续为优雅对象提供服务。后端探测命中静态页面,只要其上的网络服务器处于 运行ning 状态,它就会保持后端健康,但是如果动态页面 运行 出现问题,它们将 return 出错。

目前,如果探测失败(例如,我在后端完全关闭了网络服务器),将继续为优雅对象提供服务。但是如果我只是破坏站点本身,我会看到第一个请求 returns 缓存的对象并从后端启动一个新的获取,然后以下请求通过不可缓存的错误(在本例中为 404) .

我似乎无法找到一种方法让 Varnish 尝试从后端获取数据、获取错误响应并提供优雅的对象而不是错误,除非后端被识别为完全不健康。 我错过了一步吗?

您可以在配置中添加一些 VCL。请检查我对类似问题的回答:.

想法是(1)在vcl_backend_response期间放弃请求; (2) 在vcl_synth期间重启请求; (3) 在 vcl_recv 期间设置一个 always-sick 后端; (4) 如果后端有问题,在 vcl_hit 期间提供宽限期内容。