wget http://repo.varnish-cache.org/source/varnish-3.0.0.tar.gz
tar zxf varnish-3.0.0.tar.gz
cd varnish-3.0.0
./configure –prefix=/usr/local/varnish PKG_CONFIG_PATH=/usr/lib/pkgconfig

make
make install

cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish.sysconfig /usr/local/varnish/etc/init

cd /usr/local/vernish
mkdir cache
mkdir log

 

default.vcl

backend webserver {
.host = “192.168.1.105″;
.port = “80″;
}

sub vcl_recv {
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.host ~ “^(.*).ixdba.net” || req.http.host ~ “^(.*).ixdba.cn”) {
# set req.backend = webserver;
# }

if (req.url ~ “\.(jsp|do|php)($|\?)”) {
return (pass);
} else {
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 {

return (deliver);
}

sub vcl_miss {
return (fetch);
}

sub vcl_fetch {
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == “*”) {
/*
* Mark as “Hit-For-Pass” for the next 2 minutes
*/
set beresp.ttl = 120 s;
return (hit_for_pass);
}
return (deliver);
}

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = “HIT from 192.168.1.110″;
} else {
set resp.http.X-Cache = “MISS from 192.168.1.110″;
}
return (deliver);
}

 

配置daemon

#! /bin/sh
#
# varnish Control the Varnish Cache
#
# chkconfig: – 90 10
# description: Varnish is a high-perfomance HTTP accelerator
# processname: varnishd
# config: /etc/sysconfig/varnish
# pidfile: /var/run/varnishd.pid

### BEGIN INIT INFO
# Provides: varnish
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start:
# Default-Stop:
# Should-Start: $syslog
# Short-Description: start and stop varnishd
# Description: Varnish is a high-perfomance HTTP accelerator
### END INIT INFO

# Source function library.
. /etc/init.d/functions

retval=0
pidfile=/usr/local/varnish/log/varnish.pid

exec=”/usr/local/varnish/sbin/varnishd”
reload_exec=”/usr/local/varnish/bin/varnish_reload_vcl”
prog=”varnishd”
config=”/usr/local/varnish/etc/init”
lockfile=”/usr/local/varnish/log/varnish.lock”

# Include varnish defaults
[ -e /usr/local/varnish/etc/init ] && . /usr/local/varnish/etc/init
start() {

if [ ! -x $exec ]
then
echo $exec not found
exit 5
fi

if [ ! -f $config ]
then
echo $config not found
exit 6
fi
echo -n “Starting Varnish Cache: ”

# Open files (usually 1024, which is way too small for varnish)
ulimit -n ${NFILES:-131072}

# Varnish wants to lock shared memory log in memory.
ulimit -l ${MEMLOCK:-82000}

# $DAEMON_OPTS is set in /etc/sysconfig/varnish. At least, one
# has to set up a backend, or /tmp will be used, which is a bad idea.
if [ "$DAEMON_OPTS" = "" ]; then
echo “\$DAEMON_OPTS empty.”
echo -n “Please put configuration options in $config”
return 6
else
# Varnish always gives output on STDOUT
daemon –pidfile $pidfile $exec -P $pidfile “$DAEMON_OPTS” > /dev/null 2>&1
retval=$?
if [ $retval -eq 0 ]
then
touch $lockfile
echo_success
echo
else
echo_failure
echo
fi
return $retval
fi
}

stop() {
echo -n “Stopping Varnish Cache: ”
killproc -p $pidfile $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
stop
start
}

reload() {
if [ "$RELOAD_VCL" = "1" ]
then
$reload_exec
else
force_reload
fi
}

force_reload() {
restart
}

rh_status() {
status -p $pidfile $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

configtest() {
if [ -f "$VARNISH_VCL_CONF" ]; then
$exec -f “$VARNISH_VCL_CONF” -C -n /tmp > /dev/null && echo “Syntax ok”
else
echo “VARNISH_VCL_CONF is unset or does not point to a file”
fi
}

# See how we were called.
case “$1″ in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
configtest)
configtest
;;
*)
echo “Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}”

exit 2
esac

exit $?

 

/usr/local/varnish/etc/init启动选项

NFILES=131072
MEMLOCK=82000
DAEMON_OPTS=”-a 192.168.1.110:8888 \
-T 192.168.1.110:200 \
-f /usr/local/varnish/etc/varnish/default.vcl \
-u root -g root \
-s file,/usr/local/varnish/cache/varnish.bin,256M”