我安装了 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 的内容。