Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- backend default {
- .host = "localhost";
- .port = "80";
- }
- acl purge {
- "localhost";
- "127.0.0.1";
- }
- sub vcl_recv {
- if (req.restarts == 0) {
- 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" &&
- req.request != "PURGE") {
- /* Non-RFC2616 or CONNECT which is weird. */
- return (pipe);
- }
- # purge request
- if (req.request == "PURGE") {
- if (!client.ip ~ purge) {
- error 405 "Not allowed.";
- }
- ban("obj.http.X-Purge-Host ~ " + req.http.X-Purge-Host + " && obj.http.X-Purge-URL ~ " + req.http.X-Purge-Regex + " && obj.http.Content-Type ~ " + req.http.X-Purge-Content-Type);
- error 200 "Purged.";
- }
- # we only deal with GET and HEAD by default
- if (req.request != "GET" && req.request != "HEAD") {
- return (pass);
- }
- # # Normalize the header, remove the port (in case you're testing this on various TCP ports)
- set req.http.Host = regsub(req.http.Host, ":[0-9]+", "");
- # normalize Aceept-Encoding header
- # http://varnish.projects.linpro.no/wiki/FAQ/Compression
- if (req.http.Accept-Encoding) {
- if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$") {
- # No point in compressing these
- remove req.http.Accept-Encoding;
- } elsif (req.http.Accept-Encoding ~ "gzip") {
- set req.http.Accept-Encoding = "gzip";
- } elsif (req.http.Accept-Encoding ~ "deflate" && req.http.user-agent !~ "MSIE") {
- set req.http.Accept-Encoding = "deflate";
- } else {
- # unkown algorithm
- remove req.http.Accept-Encoding;
- }
- }
- # static files are always cacheable. remove SSL flag and cookie
- # if (req.url ~ "^/(media|js|skin)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico)$") {
- if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
- unset req.http.Https;
- unset req.http.Cookie;
- unset req.http.cookie;
- return (lookup);
- }
- # not cacheable by default
- if (req.http.Authorization || req.http.Https) {
- return (pass);
- }
- # Are there cookies left with only spaces or that are empty?
- if (req.http.cookie ~ "^ *$") {
- unset req.http.cookie;
- }
- # do not cache any page from
- # - index files
- # - ...
- if (req.url ~ "^/(index)") {
- return (pass);
- }
- # as soon as we have a NO_CACHE cookie pass request
- if (req.http.cookie ~ "NO_CACHE=") {
- return (pass);
- }
- # remove Google gclid parameters
- set req.url = regsuball(req.url,"\?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
- set req.url = regsuball(req.url,"\?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
- set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"
- return (lookup);
- }
- sub vcl_hash {
- hash_data(req.url);
- if (req.http.host) {
- hash_data(req.http.host);
- } else {
- hash_data(server.ip);
- }
- # if (!(req.url ~ "^/(media|js|skin)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico)$")) {
- # call design_exception;
- # }
- return (hash);
- }
- #
- # sub vcl_hit {
- # return (deliver);
- # }
- #
- # sub vcl_miss {
- # return (fetch);
- # }
- sub vcl_fetch {
- if (beresp.status == 500) {
- set beresp.saintmode = 30s;
- return (restart);
- }
- set beresp.grace = 5m;
- # add ban-lurker tags to object
- set beresp.http.X-Purge-URL = req.url;
- set beresp.http.X-Purge-Host = req.http.host;
- set beresp.http.X-Cacheable = "NO:Not Cacheable";
- if (beresp.status == 200 || beresp.status == 301 || beresp.status == 404) {
- if (beresp.http.Content-Type ~ "text/html" || beresp.http.Content-Type ~ "text/xml") {
- if ((beresp.http.Set-Cookie ~ "NO_CACHE=") || (beresp.ttl < 1s)) {
- set beresp.ttl = 0s;
- return (hit_for_pass);
- }
- # marker for vcl_deliver to reset Age:
- set beresp.http.magicmarker = "1";
- # Don't cache cookies
- unset beresp.http.set-cookie;
- } else {
- set beresp.http.X-Cacheable = "YES";
- # set default TTL value for static content
- unset beresp.http.expires;
- unset beresp.http.set-cookie;
- unset beresp.http.Cookie;
- set beresp.ttl = 300h;
- #set beresp.http.cache-control = "max-age=3000";
- }
- return (deliver);
- }
- return (hit_for_pass);
- sub vcl_deliver {
- set resp.http.Server = "OMG";
- remove resp.http.X-Powered-By;
- remove resp.http.MS-Author-Via;
- # debug info
- # if (resp.http.X-Cache-Debug) {
- if (obj.hits > 0) {
- set resp.http.X-Cache = "HIT";
- set resp.http.X-Cache-Hits = obj.hits;
- } else {
- set resp.http.X-Cache = "MISS";
- }
- set resp.http.X-Cache-Expires = resp.http.Expires;
- # } else {
- # remove Varnish/proxy header
- remove resp.http.X-Varnish;
- remove resp.http.Via;
- remove resp.http.Age;
- remove resp.http.X-Purge-URL;
- remove resp.http.X-Purge-Host;
- #set resp.http.Cache-Control = "max-age=300";
- #set resp.http.Expires = obj.ttl;
- #set resp.http.Age = "0";
- # }
- if (resp.http.magicmarker) {
- # Remove the magic marker
- unset resp.http.magicmarker;
- set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
- set resp.http.Pragma = "no-cache";
- set resp.http.Expires = "Mon, 31 Mar 2008 10:00:00 GMT";
- set resp.http.Age = "0";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement