configurationVarnish以重写客户端caching的Expires / Cache-Control标头

如何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"; 

等等。