# This is a basic VCL configuration file for varnish. See the vcl(7) man page for details on VCL syntax and semantics. # # Default backend definition. Set this to point to your content server. # backend default { .host = "127.0.0.1"; .port = "8080"; } # # Below is a commented-out copy of the default VCL logic. If you redefine any of these subroutines, the built-in logic will be appended to your # code. # 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") { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } if (req.request != "GET" && req.request != "HEAD") { /* We only deal with GET and HEAD by default */ return (pass); } if (req.http.Authorization || req.http.Cookie) { /* Not cacheable by default */ return (pass); } return (lookup); } # # sub vcl_pipe { # # Note that only the first request to the backend will have X-Forwarded-For set. If you use X-Forwarded-For and want to have it set for all # # requests, make sure to have: set req.http.connection = "close"; here. It is not set by default as it might break some broken web # # applications, like IIS with NTLM authentication. # 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 (!obj.cacheable) { # return (pass); # } # return (deliver); # } # # sub vcl_miss { # return (fetch); # } # # sub vcl_fetch { # if (!beresp.cacheable) { # return (pass); # } # if (beresp.http.Set-Cookie) { # return (pass); # } # return (deliver); # } # # sub vcl_deliver { # return (deliver); # } # # sub vcl_error { # set obj.http.Content-Type = "text/html; charset=utf-8"; synthetic {" # # "} obj.status " " obj.response {"

Error "} obj.status " " obj.response {"

"} obj.response {"

#

Guru Meditation:

XID: "} req.xid {"


Varnish cache server

"}; # return (deliver); # } acl purge { "localhost"; "127.0.0.1"; } sub vcl_recv { // Strip cookies for static files: if (req.url ~ "\.(jpg|mp4|m4v|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|mp4|m4v|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"; } # // You don't wish to cache content for logged in users # elsif(req.http.Cookie ~"(UserID|_session)") { # set beresp.http.X-Cacheable = "NO:Got Session"; # return(pass); # } # // You are respecting the Cache-Control=private header from the backend # elsif ( beresp.http.Cache-Control ~ "private") { # set beresp.http.X-Cacheable = "NO:Cache-Control=private"; # return(pass); # } // You are extending the lifetime of the object artificially elsif ( beresp.ttl < 1s ) { set beresp.ttl = 300s; set beresp.grace = 300s; set beresp.http.X-Cacheable = "YES:Forced"; } // Varnish determined the object was cacheable else { set beresp.http.X-Cacheable = "YES"; } return(deliver); }