如何设置 Varnish 以仅缓存静态内容?

如何设置 Varnish 以仅缓存静态内容?

我想将 Varnish 设置为 Apache 的反向代理缓存。

如何设置 Varnish,以便 Varnish 能够提供所有静态数据(jpeg、jpg、png、gif、ico、js、css、txt、pdf、gz、zip、lzma、bz2、tgz、tbz、webp、html、htm)并且动态页面应该交给 Apache)

到目前为止,我看到的唯一建议是将所有静态内容放在与动态内容不同的位置(例如子域)。这看起来很奇怪,甚至很荒谬。无论如何,这真的不是一个选择。

这样的事情有帮助吗?

if (req.url ~ “\.(jpeg|jpg|png|gif|ico|webp|js|css|txt|pdf|gz|zip|lzma|bz2|tgz|tbz|html|htm)$”) {
return (lookup);
} else {
return (pass);
}

答案1

基本上你可以通过扩展来拦截 Varnish 内容:

sub vcl_recv {
  //...
  if (req.url ~ "(?i)\.(jpeg|jpg|png|gif|ico|webp|js|css|txt|pdf|gz|zip|lzma|bz2|tgz|tbz|html|htm)$") {
      unset req.http.Cookie;
      return (lookup);
  } else {
      return (pass);
  }
  //...
}

// ..

sub vcl_fetch {
  //...
  if (req.url ~ "(?i)\.(jpeg|jpg|png|gif|ico|webp|js|css|txt|pdf|gz|zip|lzma|bz2|tgz|tbz|html|htm)$") {
      unset beresp.http.set-cookie;
  }
  //...
}

请记住,您必须从静态内容中删除 cookie。

答案2

通过谷歌快速搜索找到了以下解决方案:

最好的办法是将静态内容移至具有不同 IP 的新域。然后您只需从那里调用它即可

以下是完整帖子的链接:https://www.varnish-cache.org/forum/topic/56

基本上,您会将 Varnish 服务器指向静态内容,并让 Apache 指向动态内容 IP。

相关内容