You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

客户端从Varnish提前断开时,能否终止后端请求释放资源?

客户端断开连接时终止Varnish后端请求的方案

默认行为解析

Varnish默认会持续完成后端请求并缓存响应,哪怕客户端提前关闭连接——这就是你测试中sc_rem_close指标上升的原因,该指标统计的正是客户端主动断开的连接数。这种设计是为了填充缓存减少后续后端压力,但在页面加载慢、用户频繁中断请求的场景下,会造成后端资源的无效占用。

实现后端请求终止的VCL配置

你可以通过VCL逻辑检测客户端连接状态,一旦确认客户端断开,主动终止后端请求,让后端及时释放资源。

1. 在后端请求发起前中断

在vcl_backend_fetch阶段检查客户端连接,若已断开则直接放弃请求:

sub vcl_backend_fetch {
    if (req.is_closed) {
        return (abandon);
    }
}

return (abandon)会立即终止当前后端请求流程,Varnish会断开与后端的连接,后端服务会收到连接关闭信号(HTTP/1.1会关闭连接,HTTP/2会重置对应流),从而停止任务处理。

2. 响应返回前的兜底检查

如果后端请求已经启动,可在vcl_deliver阶段再次检查,避免Varnish浪费资源读取并缓存无用响应:

sub vcl_deliver {
    if (req.is_closed) {
        return (abandon);
    }
}

关键注意点

  • 该配置兼容你使用的Varnish 6.5和7.4.2版本(Varnish 6.0+均支持req.is_closed变量)。
  • 使用return (abandon)会导致本次请求的响应不被缓存,若你的业务更看重缓存完整性,需要在资源占用和缓存效率间做权衡。
  • 后端服务需要正确处理连接中断信号,比如开启连接超时检测、支持HTTP/2流重置等,才能真正及时终止正在执行的任务。

内容的提问来源于stack exchange,提问作者user66960

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:06:03