如何告诉varnish缓存特定的文件类型

时间:2013-01-27 16:44:00

标签: vcl varnish

我有一个托管我自己网站的专用服务器。我已经使用默认的VCL文件安装了varnish。现在我想告诉清漆做以下事情:

  1. 仅缓存以下静态文件类型(.js,.css,.jpg,.png,.gif,.jpg)。这些是提供的服务器文件类型,而不是以这些扩展名结尾的URL。
  2. 不要缓存大于1M字节的文件
  3. 任何文件的缓存都应在1天(或任何时间段)过期。
  4. 只有在Apache发送200个HTTP代码时才会发生缓存。
  5. 否则请保持请求不变,以便Apache或任何后端提供服务。

    我应该在VCL文件中写什么来达到这些要求?或者我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以在vcl_fetch子例程中执行所有这些操作。这应该被认为是伪代码。

if (beresp.http.content-type ~ "text/javascript|text/css|image/.*") {
    if (std.integer(beresp.http.Content-Length,0) < /* max size in bytes here */ ) {
        if (beresp.status == 200) { /*  backend returned 200 */
            set obj.ttl = 86400; /* cache for one day */
            return (deliver);
        }
    }
} 
set obj.ttl = 120;
return (hit_for_pass); /* won't be cached */

答案 1 :(得分:2)

我做了什么:

1-将所有静态内容隔离到另一个域(即,为动态页面提供服务的域与提供静态内容的域不同。)

2-为提供静态内容的域分配另一个专用IP地址

3-告诉清漆仅在端口80上侦听该IP(即静态内容IP)

4-使用Apache conf控制每个静态内容类型的缓存周期(varnish将遵循该标头)

缺点:

1- Varnish甚至不会听取或处理它应该完好无损的请求。这些请求(对于动态页面)直接发送到Apache,因为Apache监听原始IP(性能)。

2-无需更改默认的VCL默认文件(仅当您要调试时),这对那些不了解VCL语言原理的人有帮助。

3-您正在控制Apache conf。

中的所有内容

优点:

1-如果您没有备用IP,则必须购买新的专用IP。

感谢