Varnish 4.1 - 根据后端响应调用重启

Varnish 4.1 - Call a restart according to the backend response

在 Varnish 4 之前,可以从 vcl_fetch 调用重新启动以启动另一个流到达 vcl_recv。

在版本 4 中,逻辑被分离到客户端和后端,我需要能够根据后端响应调用重启。我认为可能的一个方向是使用 vcl_synth 作为后端和客户端之间的中间件,但后端无法发送特定的错误代码或消息,只能发送标准 503 错误。

有什么想法吗?

您无法在 vcl_backend_* 期间在 Varnish 4.x 中重新启动请求。

您可以 return (abandon)vcl_backend_* 期间,然后在 vcl_synth if resp.status == 503 重新启动请求,但是您不能将任何信息从 vcl_backend_* 传输到 vcl_synth 为了实现更智能的条件。

作为替代方案,您可以根据后端返回的内容在 vcl_deliver 期间执行重启。