如何configurationVarnish以便所有匹配请求的响应都会在客户端的浏览器中caching30天?
我想要做的是让Varnish设置正确的“Expires:”和/或“Cache-Control”设置,这样所有的CSS都被caching了30天,而不pipe后端怎么说客户端的caching能力这些对象。
这是诀窍:
sub vcl_fetch { .. if (req.url ~ "\.css$") { set obj.http.magicmarker = "1"; } .. } sub vcl_deliver { .. if (resp.http.magicmarker) { unset resp.http.magicmarker; set resp.http.Cache-Control = "..."; set resp.http.Expires = "..."; set resp.http.Age = "..."; } .. }
我认为Varnish不会让你将VCL规则的范围扩大到“* .css”。 您可能需要在Varnish邮件列表上询问有关这方面的确切信息。 应该可以通过MIMEtypes确定范围。
假设你的对象已经设置了caching头,但你想规范化它们,那么这个Varnish文档VCL的修改版本应该可以帮助你: http : //varnish.projects.linpro.no/wiki/VCLExampleLongerCaching
一般来说,Varnish不是为了做大量的标题或内容重写而构build的。 您的Web服务器或Web应用程序应该比Varnish做得更好。
我只需要指出,清漆实际上是非常适合重写标题的。 在vcl_recv中testing任何url是可能的,而在vcl_fetch中,这是一个常见的varnish应用程序。 在recv中,你分析一个传入的请求。 在获取您分析后端响应。
通常,您在recv中操作请求,并将其引导到后端,并在提取中操作响应,并在潜在地将对象存储在高速caching中之前重写头以适应,并传递响应。
在取回你可以做
unset beresp.http.expires; unset beresp.http.cache-control;
以及
set beresp.http.Cache-Control = "max-age = 2678406";
等等。