Its relatively simple, pop over to varnish add the repository and install
change your apache port to something else in a custom template say 8080
get directadmin to rewrite all of the httpd.conf's
change /etc/sysconfig/varnish, so varnish is on port 80, and change the name of the default.vcl, so updates do not override yours.
Run a script similar to this to create your backend, you could polish this script, but its simple and works.
--- Start Of Script ---
#!/bin/bash
# Varnish VCL Creator
# (C) 2012 UnixGuru Consulting
# Author: Andrew Shaw
VARNISH_VCL="/etc/varnish/custom.vcl"
IPFILE="/usr/local/directadmin/data/admin/ip.list"
BEPORT="8080"
echo "#Default Backend" > ${VARNISH_VCL}
echo "backend default {" >> ${VARNISH_VCL}
echo " .host = \"127.0.0.1\";" >> ${VARNISH_VCL}
echo " .port = \"${BEPORT}\";" >> ${VARNISH_VCL}
echo "}" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
#echo "#Remove Accept-Encoding Header" >> ${VARNISH_VCL}
#echo "unset req.http.Accept-Encoding;" >> ${VARNISH_VCL}
#echo >> ${VARNISH_VCL}
echo "#IP BackEnds" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
for i in $(cat ${IPFILE})
do
BE_NAME=$(echo "B${i}" | sed 's/\./\_/g')
echo "backend ${BE_NAME} {" >> ${VARNISH_VCL}
echo " .host = \"${i}\";" >> ${VARNISH_VCL}
echo " .port = \"${BEPORT}\";" >> ${VARNISH_VCL}
echo "}" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
done
echo "#IP ACLs" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
for i in $(cat ${IPFILE})
do
ACL_NAME=$(echo "A${i}" | sed 's/\./\_/g')
echo "acl ${ACL_NAME} {" >> ${VARNISH_VCL}
echo " \"${i}\";" >> ${VARNISH_VCL}
echo "}" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
done
echo "# Map the ACL IPs to the Backend Proxies" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
echo "sub vcl_recv {" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
for i in $(cat ${IPFILE})
do
ACL_NAME=$(echo "A${i}" | sed 's/\./\_/g')
BE_NAME=$(echo "B${i}" | sed 's/\./\_/g')
echo " if (server.ip ~ ${ACL_NAME}) {" >> ${VARNISH_VCL}
echo " set req.backend = ${BE_NAME};" >> ${VARNISH_VCL}
echo " }" >> ${VARNISH_VCL}
echo >> ${VARNISH_VCL}
done
echo "}" >> ${VARNISH_VCL}
--- End Of Script ---
restart varnish, restart apache and you are sorted.
Because this uses IPs and not domains in the vcl, it does not need updating, unless you add or remove ips, makes it easier for da.