我想将 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。