1.安装
yum -y install pcre-devel ncurses-devel
useradd -s /sbin/nologin varnish
mkdir /data/varnish/cache
mkdir /data/varnish/log
chown -R varnish:varnish /data/varnish/cache
chown -R varnish:varnish /data/varnish/log
tar zxvf varnish-3.0.3.tar.gz -C /usr/src/
cd /usr/src/varnish-3.0.3/
sh autogen.sh
sh configure
make check
make install
cp redhat/varnish.sysconfig /etc/sysconfig/varnish
cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish_reload_vcl /usr/local/sbin/
2.编辑
cd /usr/local/etc/varnish/
vi default.vcl
backend default {
.host = "192.168.10.2";
.port = "80";
}
acl purge {
"localhost";
"127.0.0.1";
"192.168.10.1";
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "not allowed.";
}
# return (lookup);
}
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE") {
return (pipe);
}
if (req.request != "GET" && req.request != "HEAD") {
return (pass);
}
if (req.http.Authorization || req.http.Cookie) {
return (pass);
}
if (req.http.host ~ "^(.*).kangweiqi.com") {
set req.backend = default;
}
return (lookup);
}
sub vcl_pipe {
return (pipe);
}
sub vcl_pass {
return (pass);
}
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return (hash);
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
# if (!obj.cacheable) {
# return (pass);
# }
# if (obj.http.Vary) {
# unset obj.http.Vary;
# }
return (deliver);
}
sub vcl_miss {
if (req.request == "PURGE") {
error 404 "not in cache.";
}
return (fetch);
}
sub vcl_fetch {
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == "*") {
set beresp.ttl = 120 s;
return (hit_for_pass);
}
if (req.request == "GET" && req.url ~ "\.(png|xsl|xml|bmp|jpeg|ico|swf|txt|png|jpg|gif|css|js|html|htm)$") {
set beresp.ttl =600s;
}
return (deliver);
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "hit from www.kangweiqi.com ";
} else {
set resp.http.X-Cache = "miss from www.kangweiqi.com ";
}
return (deliver);
}
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.Retry-After = "5";
synthetic {"
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html>
<head>
<title>"} + obj.status + " " + obj.response + {"</title>
</head>
<body>
<h1>Error "} + obj.status + " " + obj.response + {"</h1>
<p>"} + obj.response + {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} + req.xid + {"</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
"};
return (deliver);
}
sub vcl_init {
return (ok);
}
sub vcl_fini {
return (ok);
}
vi /etc/sysconfig/varnish #修改以下几处
VARNISH_VCL_CONF=/usr/local/etc/varnish/default.vcl
VARNISH_LISTEN_ADDRESS=192.168.10.1
VARNISH_LISTEN_PORT=80
VARNISH_STORAGE_FILE=/data/varnish/cache/varnish_cache.data
VARNISH_STORAGE_SIZE=512M
#VARNISH_SECRET_FILE=/usr/local/etc/varnish/secret #这一行注释掉,下面的- S ${VARNISH_SCRET_FILE}这行参数也要删掉
vi /etc/init.d/varnish #修改以下几处
exec="/usr/local/sbin/varnishd"
reload_exec="/usr/local/sbin/varnish_reload_vcl"
prog="varnishd"
config="/etc/sysconfig/varnish"
lockfile="/var/lock/subsys/varnish"
vi /usr/local/sbin/varnish_reload_vcl #修改以下几处
#elif [ -z "$VARNISH_SECRET_FILE" ]; then
# echo "Warning: VARNISH_SECRET_FILE is not set"
# secret=""
#elif [ ! -s "$VARNISH_SECRET_FILE" ]; then
# echo "Error: varnish secret file $VARNISH_SECRET_FILE is unreadable or empty"
# exit 2
#else
# secret="-S $VARNISH_SECRET_FILE" #注释掉上面这几行
VARNISHADM="/usr/local/sbin/varnishadm $secret -T $VARNISH_ADMIN_LISTEN_ADDRESS:$VARNISH_ADMIN_LISTEN_PORT" #这一行修改varnishadm路径
3.启动
/etc/init.d/varnish start
4.查看缓存效果
curl -I http://www.kangweiqi.com/2.2.html
/usr/local/bin/varnishstat -n /usr/local/var/varnish/www.kangweiqi.com
5.清除缓存
telnet 127.0.0.1 6082
ban.url /2.2.html
quit