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

Varnish缓存特定URL路径失败问题求助

修复Varnish缓存/js/目录文件的问题

问题根源

你的VCL规则中,正则表达式^/js/.$的匹配逻辑错误:

  • 这个正则仅匹配/js/后紧跟单个字符的路径(比如/js/a),而实际请求的/js/themes.js这类包含多个字符的路径无法匹配,导致代码进入else分支,强制设置cache-control: max-age = 0和ttl = 0s,自然无法被缓存。

修复方案

修改vcl_backend_response中的正则表达式,使其匹配所有以/js/开头的路径:

sub vcl_backend_response {
   if (bereq.url ~ "^/js/") {
       unset beresp.http.set-cookie;
       set beresp.http.cache-control = "max-age=2592000";
       set beresp.ttl = 1y;
   } else {
       set beresp.http.cache-control = "max-age=0";
       set beresp.ttl = 0s;
   }
}

额外优化点

  • 去掉max-age值前后的空格,标准的Cache-Control头格式是max-age=2592000,空格可能导致部分客户端解析异常。
  • 如果需要更精确匹配/js/下的JS文件,可以用^/js/.*\.js$,避免匹配/js/下的非JS资源。

验证修复

重新加载VCL配置后,用curl请求测试:

curl -I localhost:6081/js/themes.js

如果修复成功,响应头会显示:

  • cache-control: max-age=2592000
  • 多次请求后Age字段会大于0,说明资源已被缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:45:31