以下内容为个人配置笔记,仅供参考,请勿用于生产环境
varnish基本上是一个不错的squid替代品,个人研究和使用不多,在小型应用中出场的机率不大,不过在这里还是简单介绍一下在ubuntu下的安装配置。
sudo apt-get install varnish
软件就安装完了,配置的话需要配合你的应用服务,比如我的设置方式:让nginx监听在8081端口,而ip默认的80端口让给varnish来做第一道处理。
修改/etc/default/varnish配置文件:
sudo vi /etc/default/varnish
将DAEMON_OPTS里的-a :6081改为-a :80
最后内容例如:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"
然后编辑你的varnish配置文件:/etc/varnish/default.vcl,
sudo vi /etc/varnish/default.vcl
在我的应用中后端是本机的nginx监听8081端口则修改/添加:
backend default {
.host = "127.0.0.1";
.port = "8081";
}
我的这段backend名称为default,在后面的请求处理环节需要把指定域名的请求转发给我的backend:
sub vcl_recv {
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}
if (req.request != "GET" && req.request != "HEAD") {
/* We only deal with GET and HEAD by default */
return (pass);
}
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
if (req.http.host ~ "^([0-9a-z]+.)?zr4u.com$") {
set req.backend = default;
}elseif(req.http.host ~ "^([0-9a-z]+.)?mdat.me$"){
set req.backend = default;
}elseif(req.http.host ~ "^([0-9a-z]+.)?thirdparty.com$"){
set req.backend = default;
}else{
return (pass);
}
return (lookup);
}
也有在fetch段处理的配置方式不过我的fetch段主要用来处理通用情况:
sub vcl_fetch {
if (!obj.cacheable) {
return (pass);
}
if (req.request == "GET" && req.url ~ "\.(txt|js)$") {
set obj.ttl = 3600s;
}else{
if (obj.http.Set-Cookie) {
return (pass);
}
}
set obj.prefetch = -30s;
return (deliver);
}
更多的配置方法请参考官方的wiki:http://varnish-cache.org/wiki/VCL

要说点啥就在这吧