【问题标题】:How to tell varnish to cache specific file types如何告诉清漆缓存特定的文件类型
【发布时间】:2013-01-11 01:22:12
【问题描述】:

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

  1. 仅缓存以下静态文件类型(.js、.css、.jpg、.png、.gif、.jpg)。这些是提供的服务器文件类型,而不是以这些扩展名结尾的 URL。
  2. 不要缓存大于 1M 字节的文件
  3. 任何文件的缓存都应在 1 天(或任何期限)内到期。
  4. 仅当 Apache 发送 200 个 HTTP 代码时才可能发生缓存。

否则请保持请求不变,以便由 Apache 或任何后端提供服务。

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

【问题讨论】:

    标签: vcl varnish


    【解决方案1】:

    我做了什么:

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

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

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

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

    缺点:

    1- Varnish 甚至不会监听或处理它应该保持不变的请求。由于 Apache 侦听原始 IP(性能),因此这些请求(针对动态页面)将直接发送到 Apache。

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

    3- 您正在通过 Apache conf 控制一切。

    优点:

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

    谢谢

    【讨论】:

      【解决方案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 */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-11
        • 2014-04-07
        • 2018-08-07
        • 2012-04-03
        • 2018-12-25
        • 1970-01-01
        • 2018-10-03
        • 2017-02-22
        相关资源
        最近更新 更多