#!/bin/sh
DIR=
/usr/src
CODE=$?
VER=$1
if
[ -z $1 ];
then
echo
"Usage:{$0 'Version' install |config |start|help } , Example $0 2.1.5 install}"
exit
fi
URL=https:
//repo
.varnish-cache.org
/source/varnish-
${VER}.
tar
.gz
function
install
()
{
if
[ ! -d
/usr/local/varnish
-o ! -f
/etc/init
.d
/varnishd
];
then
cd
$DIR ;wget -c $URL
if
[ $CODE ==
'0'
];
then
echo
"This varnish Files is Download Successed!"
else
echo
"This varnish Files is Download Failed!"
fi
useradd
-s
/sbin/noin
varnish
mkdir
-p
/data/varnish/
{cache,}
chown
-R varnish.varnish
/data/varnish/
tar
xzf varnish-${VER}.
tar
.gz ;
cd
varnish-${VER} ;
/bin/sh
autogen.sh ;.
/configure
--prefix=
/usr/local/varnish
--
enable
-dependency-tracking --
enable
-debugging-symbols --
enable
-developer-warnings -
enable
-extra-warnings &&
make
&&
make
install
else
echo
"This Varnish is exists,Please exit..."
sleep
1
exit
0
fi
}
function
config()
{
if
[ ! -d
/usr/local/varnish/
-o -f
/etc/init
.d
/varnishd
];
then
echo
"You can't config varnish ,Please ensure you varnish dir is or not exist..."
exit
0
else
echo
"Varnish Already Success Install ,Please Config varnish ......"
fi
mv
/usr/local/varnish/etc/varnish/default
.vcl
/usr/local/varnish/etc/varnish/default
.vcl.bak
cat
>>
/usr/local/varnish/etc/varnish/default
.vcl <<EOF
backend server_1
{
.host =
"192.168.149.128"
;
.port =
"8080"
;
.probe = {
.timeout = 5s;
.interval = 2s;
.window = 8;
.threshold = 5;
}
}
backend server_2
{
.host =
"192.168.149.129"
;
.port =
"8080"
;
.probe = {
.timeout = 5s;
.interval = 2s;
.window = 8;
.threshold = 5;
}
}
director rsver random {
{
.backend = server_1;
.weight = 6;
}
{
.backend = server_2;
.weight = 6;
}
}
acl purge {
"localhost"
;
"127.0.0.1"
;
}
sub vcl_recv
{
if
(req.http.host ~
"^(.*).tdt.com"
)
{
set
req.backend =rsver;
}
else
{
error 200
"Nocahce for this domain"
;
}
if
(req.request ==
"PURGE"
)
{
if
(!client.ip ~purge)
{
error 405
"Not allowed."
;
}
else
{
return
(pipe);
}
}
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"
)
{
return
(pipe);
}
if
(req.http.Expect)
{
return
(pipe);
}
if
(req.http.Authenticate|| req.http.Cookie)
{
return
(pass);
}
if
(req.http.Cache-Control~
"no-cache"
)
{
return
(pass);
}
if
(req.url ~
"\.jsp"
|| req.url ~
"\.php"
)
{
return
(pass);
}
else
{
return
(lookup);
}
}sub vcl_pipe
{
return
(pipe);
}sub vcl_pass
{
return
(pass);
}sub vcl_hash
{
set
req.
hash
+= req.url;
if
(req.http.host)
{
set
req.
hash
+=req.http.host;
}
else
{
set
req.
hash
+=server.ip;
}
return
(
hash
);
}sub vcl_hit
{
if
(req.request ==
"PURGE"
)
{
set
obj.ttl = 0s;
error 200
"Purged."
;
}
if
(!obj.cacheable)
{
return
(pass);
}
return
(deliver);
}sub vcl_miss
{
if
(req.request ==
"PURGE"
)
{
error 404
"Not incache."
;
}
if
(req.http.user-agent ~
"spider"
)
{
error 503
"Notpresently in cache"
;
}
return
(fetch);
}
sub vcl_fetch
{
if
(req.request ==
"GET"
&& req.url ~
"\.(txt|js)$"
)
{
set
beresp.ttl = 3600s;
}
else
{
set
beresp.ttl = 30d;
}
if
(!beresp.cacheable)
{
return
(pass);
}
if
(beresp.http.Set-Cookie)
{
return
(pass);
}
return
(deliver);
}
sub vcl_deliver {
if
(obj.hits > 0) {
set
resp.http.X-Cache=
"HIT FROM TDTWS Cache Center"
;
}
else
{
set
resp.http.X-Cache=
"MISS FROM TDTWS Cache Center"
;
}
return
(deliver);
}
EOF
if
[ $? == 0 ];
then
echo
'----------------------------------'
sleep
2
echo
"This Varinsh Config Success !!!"
else
echo
"This Varinsh Config Failed,Please Check Conf!"
fi
}
function
start()
{
if
[ ! -d
/usr/local/varnish
-o -f
/etc/init
.d
/varnishd
];
then
echo
"You can't config varnish ,Please ensure you varnish dir is or not exist..."
exit
0
else
count=`
ps
-ef |
grep
varnishd|
grep
-
v
grep
|
wc
-l`
if
[ $count -
eq
0 ];
then
echo
"Varnish Already Success Install ,Now start varnish...."
cat
<<EOF
------------------------------------------------------
Start Varnish to listen 0.0.0.0:80.
The Varnish load balancer server1(192.168.149.128 8080).
The Varnish load balancer server1(192.168.149.129 8080).
The Varnish Mgr address to listen 0.0.0.0:8001.
The Varnish Cache DIR
/data/varnish/cache
.
EOF
/usr/local/varnish/sbin/varnishd
-n
/data/varnish/cache
-f
/usr/local/varnish/etc/varnish/default
.vcl -a 0.0.0.0:80 -s
file
,
/data/varnish/varnish_cache
.data,16G -p user=varnish -p group=varnish -p default_ttl=14400 -p thread_pool_max=8000 -p send_timeout=20 -w 5,51200,30 -T 0.0.0.0:8001 -P
/usr/local/varnish/var/varnish
.pid
if
[ $? == 0 ];
then
echo
"Start varnish ...OK"
fi
else
echo
"Warning,This Varnish Service is exist."
fi
fi
}
case
$2
in
install
)
install
;;
config)
config
;;
start )
start
;;
* )
echo
"Usage:{ Usage $0 version install |config |start|help }"
;;
esac