可以缓存没有特定扩展名或位于特定目录中的文件

可以缓存没有特定扩展名或位于特定目录中的文件

我安装了 varnish 来缓存我的服务提供的 (许多) 图像。每秒大约有 200 张 4k 大小的图像,varnish 会根据以下规则愉快地为它们提供服务:

if (req.request == "GET" && req.url ~ "\.(css|gif|jpg|jpeg|bmp|png|ico|img|tga|wmf)$") {
            remove req.http.cookie;
            return(lookup);
    }

现在,问题是我最近在同一台服务器上添加了另一项服务,该服务会创建缩略图以供使用,但它没有添加特定的扩展名。这些文件的文件名模式如下:

http://www.example.com/thumbnails/date-of-thumbnail/xxxxxxxxx.xx

其中 xx 是数字,所以 xxxxxxxxx.xx 可能是 6482364283.73(末尾有两个数字)(实际上这是时间戳,因此我可以在文件名中保留额外的信息)

这样做的副作用是,Varnish 不会缓存它们,而且我发现它们不断地由 apache 本身提供服务。

尽管我可以从现在开始更改格式以创建以 结尾的缩略图.jpg,但是有没有办法更改我的 varnish 守护进程的 vcl 文件以将所有内容缓存在目录(目录thumbnails)下或扩展名为两个数字的所有内容?

如果我可以提供任何其他信息,请告诉我!

谢谢!

答案1

对现有规则稍作修改即可达到目的:

if (req.request == "GET" && req.url ~ "^/thumbnails/") {
        remove req.http.cookie;
        return(lookup);
}

\.\d{2}$或者,如果您想缓存以两位数字结尾的所有内容,您可以创建正则表达式。

答案2

认为使用匹配的缩略图目录更容易。

req.url ~ "\thumbnails\?.*"应该相当接近。

我建议你阅读更多有关正则表达式和 Varnish 的内容。

相关内容