گروه آموزشی مجموعه تدبیر
. Install varnish:
sudo apt-get install varnish
2. Configure varnish to serve on 80 and fetch from 8008:
vim /etc/default/varnish
DAEMON_OPTS="-a :80
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G
vim /etc/varnish/default.vcl
backend apache {
.host = "127.0.0.1";
.port = "8008";
}
acl purge {
"localhost";
"127.0.0.1";
}
sub vcl_recv {
// Strip cookies for static files:
if (req.url ~ ".(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$") {
unset req.http.Cookie;
return(lookup);
}
// Remove has_js and Google Analytics __* cookies.
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;s*)(__[a-z]+|has_js)=[^;]*", "");
// Remove a ";" prefix, if present.
set req.http.Cookie = regsub(req.http.Cookie, "^;s*", "");
// Remove empty cookies.
if (req.http.Cookie ~ "^s*$") {
unset req.http.Cookie;
}
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
purge("req.url ~ " req.url " && req.http.host == " req.http.host);
error 200 "Purged.";
}
}
sub vcl_hash {
if (req.http.Cookie) {
set req.hash += req.http.Cookie;
}
}
sub vcl_fetch {
// Strip cookies for static files:
if (req.url ~ ".(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$") {
unset beresp.http.set-cookie;
}
// Varnish determined the object was not cacheable
if (!beresp.cacheable) {
set beresp.http.X-Cacheable = "NO:Not Cacheable";
} elsif(req.http.Cookie ~"(UserID|_session)") {
// You don't wish to cache content for logged in users
set beresp.http.X-Cacheable = "NO:Got Session";
return(pass);
} elsif ( beresp.http.Cache-Control ~ "private") {
// You are respecting the Cache-Control=private header from the backend
set beresp.http.X-Cacheable = "NO:Cache-Control=private";
return(pass);
} elsif ( beresp.ttl < 1s ) {
// You are extending the lifetime of the object artificially
set beresp.ttl = 300s;
set beresp.grace = 300s;
set beresp.http.X-Cacheable = "YES:Forced";
} else {
// Varnish determined the object was cacheable
set beresp.http.X-Cacheable = "YES";
}
return(deliver);
}
4. Set apache to listen on port 8008:
vim /etc/apache2/ports.conf NameVirtualHost *:8008 Listen 8008
5. Set all vhosts to listen on port 8008:
vim /etc/apache2/sites-enabled/000-default <Virtualhost *:8008> ... </Virtualhost>
Do the same for all other vhosts.
6. Restart Apache and Varnish:
service apache2 restart service varnish restart
7. Test varnish:
curl -I http://www.euperia.com/linux/setting-up-varnish-with-apache-tutorial/ HTTP/1.1 200 OK Server: Apache X-Pingback: http://www.euperia.com/xmlrpc.php Link: ; rel=shortlink Vary: Accept-Encoding,User-Agent Content-Type: text/html; charset=UTF-8 X-Cacheable: YES Content-Length: 22992 Date: Wed, 05 Jan 2011 22:01:22 GMT X-Varnish: 769719461 769719459 Age: 7 Via: 1.1 varnish Connection: keep-alive
Notice the Varnish headers? There are also a couple of these. Age shows the age of the item in the Varnish cache.