Copy of Configure Varnish for Pressflow

Copy of Configure Varnish for Pressflow

No instructions here yet, just a bare configuration.

/etc/varnish/default.vcl
backend default { .host = "127.0.0.1"; .port = "8080"; .connect_timeout = 600s; .first_byte_timeout = 600s; .between_bytes_timeout = 600s; } sub vcl_recv { 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); } // Remove has_js and Google Analytics cookies. set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|__utma_a2a|has_js)=[^;]*", ""); // To users: if you have additional cookies being set by your system (e.g. // from a javascript analytics file or similar) you will need to add VCL // at this point to strip these cookies from the req object, otherwise // Varnish will not cache the response. This is safe for cookies that your // backend (Drupal) doesn't process. // // Again, the common example is an analytics or other Javascript add-on. // You should do this here, before the other cookie stuff, or by adding // to the regular-expression above. // 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.http.Authorization || req.http.Cookie) { // Not cacheable by default return (pass); }   // Skip the Varnish cache for install, update, and cron   if (req.url ~ "install\.php|update\.php|cron\.php") {     return (pass);   }   // Normalize the Accept-Encoding header   // as per: http://varnish-cache.org/wiki/FAQ/Compression   if (req.http.Accept-Encoding) {     if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {       # No point in compressing these       remove req.http.Accept-Encoding;     } elsif (req.http.Accept-Encoding ~ "gzip") {     set req.http.Accept-Encoding = "gzip";    } else {      # Unknown or deflate algorithm      remove req.http.Accept-Encoding;    }  }  // Let's have a little grace  set req.grace = 30s; return (lookup); } sub vcl_hash {   if (req.http.Cookie) {     hash_data (req.http.Cookie);   } } // Strip any cookies before an image/js/css is inserted into cache. sub vcl_fetch {   if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {     // For Varnish 2.0 or earlier, replace beresp with obj:     // unset obj.http.set-cookie;     unset beresp.http.set-cookie;   } } // Set a header to track a cache HIT/MISS. sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Varnish-Cache = "HIT"; } else { set resp.http.X-Varnish-Cache = "MISS"; } } sub vcl_error {   // Let's deliver a friendlier error page.   // You can customize this as you wish.   set obj.http.Content-Type = "text/html; charset=utf-8";   synthetic {"   <?xml version="1.0" encoding="utf-8"?>   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">   <html>     <head>       <title>"} + obj.status + " " + obj.response + {"</title>       <style type="text/css">       #page {width: 400px; padding: 10px; margin: 20px auto; border: 1px solid black; background-color: #FFF;}       p {margin-left:20px;}       body {background-color: #DDD; margin: auto;}       </style>     </head>     <body>     <div id="page">     <h1>Page Could Not Be Loaded</h1>     <p>We're very sorry, but the page could not be loaded properly. This should be fixed very soon, and we apologize for any inconvenience.</p>     <hr />     <h4>Debug Info:</h4>     <pre>Status: "} + obj.status + {" Response: "} + obj.response + {" XID: "} + req.xid + {"</pre>       </div>     </body>    </html>   "};   return(deliver); }