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

如何在多层Varnish缓存服务器中合并X-Cache响应头

多层Varnish缓存合并X-Cache响应头实现方案

要实现第二层缓存服务器合并第一层的X-Cache头信息,只需通过两个VCL阶段的配合即可完成:捕获父层缓存的响应头、拼接当前层的缓存状态。

1. 捕获第一层缓存的X-Cache值

在第二层Varnish的vcl_backend_response阶段(处理后端即第一层缓存返回的响应),将第一层返回的X-Cache值保存到自定义响应头中,避免后续被覆盖:

sub vcl_backend_response {
    # 保存第一层缓存的X-Cache值到自定义头X-Cache-Parent
    set beresp.http.X-Cache-Parent = beresp.http.X-Cache;
}

2. 拼接当前层与父层的缓存状态

在第二层Varnish的vcl_deliver阶段,判断当前层的缓存命中状态,再与之前保存的父层缓存状态拼接,最终设置到X-Cache头中。同时可选择删除自定义的X-Cache-Parent头,避免返回给客户端:

sub vcl_deliver {
    # 处理父层缓存头不存在的情况,默认显示ORIGIN表示直达源站
    declare local var.parent_cache_status STRING;
    set var.parent_cache_status = resp.http.X-Cache-Parent ?: "ORIGIN";

    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT, " + var.parent_cache_status;
    } else {
        set resp.http.X-Cache = "MISS, " + var.parent_cache_status;
    }

    # 可选:移除自定义头,不暴露给客户端
    unset resp.http.X-Cache-Parent;
}

扩展说明

如果后续需要扩展到三层及以上缓存,只需在每一层缓存服务器中复用相同逻辑:

  • 每层在vcl_backend_response中保存上一层的X-Cache值到X-Cache-Parent
  • 在vcl_deliver中拼接当前层状态与父层状态

最终客户端收到的X-Cache头会呈现类似HIT, HIT, MISS的格式,从左到右依次是最外层到最内层的缓存命中状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:05:46