cd yum install -y ncurses-devel libedit-devel readline-devel ksh varnish-libs-devel libtool automake rpm-build pcre-devel python-docutils ln -s /bin/ksh /usr/bin/ wget http://repo.varnish-cache.org/redhat/varnish-3.0/el6/src/varnish/varnish-3.0.5-1.el6.src.rpm rpm -ivh varnish-3.0.5-1.el6.src.rpm rpmbuild -ba ~/rpmbuild/SPECS/varnish.spec rpm -ivh ~/rpmbuild/RPMS/x86_64/varnish-*.rpm wget https://github.com/lkarsten/libvmod-ipcast/archive/master.zip mkdir ~/Build/ cd ~/Build/ unzip ~/master.zip cd ~/Build/libvmod-ipcast-master/ ./autogen.sh ./configure VARNISHSRC=~/rpmbuild/BUILD/varnish-3.0.5 make make install make check vi /etc/varnish/default.vcl
# Varnish & redirecting countries / by country blocking # Allow nz ACL to localhost:8080, redirect others to localhost:81 # Pound listens at 443 and connects to varnish listening at localhost:8081 # Pound.cfg has # ListenHTTPS # HeadRemove "X-Forwarded-Proto" # AddHeader "X-Forwarded-Proto: https" # NOTE Sequencing below matters. Think C function prototypes import ipcast; acl nz { "10.0.0.0"/8; "172.16.0.0"/12; "192.168.0.0"/16; } backend worldserver { .host = "127.0.0.1"; .port = "81"; } sub vcl_recv { if (req.http.X-Forwarded-For !~ ",") { set req.http.xff = req.http.X-Forwarded-For; } else { set req.http.xff = regsub(req.http.X-Forwarded-For, "^[^,]+.?.?(.*)$", "\1"); } if (ipcast.clientip(req.http.xff) != 0) { error 400 "Bad request"; } if (client.ip !~ nz) { # error 403 "Forbidden"; set req.backend = worldserver; } } backend default { .host = "127.0.0.1"; .port = "8080"; }