使用Varnish避免使用不同URI的可用项目的双重缓存

时间:2014-03-30 12:12:10

标签: regex caching varnish varnish-vcl

在Varnish Cache wiki中,它说明了如何regsub分别避免向www.example.com和example.com缓存请求的示例。 https://www.varnish-cache.org/trac/wiki/RedirectsAndRewrites的示例是:

set req.http.host = regsub(req.http.host, "^www\.example\.com$","example.com");

“对www.example.com和example.com的请求都将作为”example.com“进入后端,并最终被该字符串缓存。”这意味着不会发生重复缓存。

我有多个站点使用相同的清漆服务器(VCL),所以我希望用一个可以处理多个URL的语句替换“example.com”。例如:

www.example1.co.uk > example1.co.uk
www.example2.com > example2.com

这个适当的正则表达式(如果这是正确的术语)是什么?

使用此VCL有多个单独的域(不同域上具有不同内容的不同站点)我希望避免在添加/删除新站点时更改vcl。因此,通用解决方案就是我所追求的,可以应用于任何域以消除复制的可能性,无论是否存在由Varnish存储/服务的WWW别名。 (说不清楚这个,希望它更清楚!)

我知道重定向可以在varnish之外,在Apache等中完成,但不是将其作为解决方案。

2 个答案:

答案 0 :(得分:1)

set req.http.host = regsub(req.http.host,
                           "^www\.(.*)$",
                           "\1");

这将剥离任何域名的www。 (我确实不愿意给你这个答案,因为这违背了我的religion

搜索引擎可能会因为在多个网址上提供相同内容而受到惩罚,但搜索引擎优化是另一个主题。

答案 1 :(得分:1)

而不是克里斯建议的,你可以删除www部分:

set req.http.host = regsub(req.http.host, "^www\.", "");

也应该快一点点