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

Varnish缓存:整页Age Header始终为0问题求助

排查Drupal + Varnish整页不缓存问题

从以下几个核心方向逐一排查定位:

1. 核查Drupal自身缓存配置

  • 确认后台页面缓存已启用:进入配置 > 性能,确保"页面缓存最大年龄"设置为非0值(如3600秒=1小时)
  • 检查页面缓存标记:查看响应头,若存在Cache-Control: no-cache, no-store, must-revalidate或X-Drupal-Cache: MISS持续出现,说明Drupal未生成可缓存的页面输出
  • 排查动态内容干扰:若页面包含[user:name]这类个性化Token,或存在设置为"不缓存"的区块,Drupal会自动发送Cache-Control: private头,直接阻止Varnish缓存整页

2. 分析Varnish缓存决策逻辑

  • 检查请求头Cookie字段:若请求携带Drupal会话Cookie(如SESSxxxx),Varnish默认会跳过缓存(会话关联个性化内容),测试时用匿名窗口访问或清除Cookie后重试
  • 用varnishlog实时追踪缓存流程:
    varnishlog -g request -q "ReqUrl ~ '你的Drupal页面路径'"
    
    重点关注Hit/Miss标记和VCL_*阶段的处理规则,确认是否有VCL逻辑阻止缓存
  • 覆盖私有缓存头(如需):若Drupal发送Cache-Control: private,可在VCL中添加规则强制缓存特定页面:
    sub vcl_backend_response {
        if (bereq.url ~ '^/需要缓存的页面路径') {
            unset beresp.http.Cache-Control;
            set beresp.http.Cache-Control = "public, max-age=3600";
            set beresp.ttl = 1h;
        }
    }
    

3. 检查Varnish的VCL配置规则

  • 确认无错误缓存排除规则:检查vcl_recv阶段,确保仅POST、带Authorization的请求才执行return(pass),GET/HEAD请求正常进入缓存逻辑
  • 排查路径匹配问题:确认VCL中未对Drupal首页或核心页面路径设置强制跳过缓存的规则

4. 排查模块冲突

  • 禁用干扰缓存的模块:如Devel(开发模块默认禁用缓存)、Page Manager等自定义页面模块
  • 核查缓存控制类模块:若安装了第三方缓存管理模块,确认其规则未强制设置页面为不可缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:09:58