backend default {
.host = "127.0.0.1";
.port = "8080";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
.probe = {
.url = "/status.php";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
// Define the privilged networks
acl privileged {
"127.0.0.0"/8;
"10.0.0.0"/8;
}
sub vcl_recv {
// Allow stale content if backend server is slow or down.
set req.grace = 6h;
// Try to use anonymous pages if backend is down.
if (!req.backend.healthy) {
unset req.http.Cookie;
}
// Always cache the following file types for all users.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$") {
unset req.http.Cookie;
}
// Remove has_js and Google Analytics __* and Drupal.toolbar.collapsed cookies.
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|has_js|Drupal.toolbar.collapsed)=[^;]*", "");
// 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;
}
// Lock down access to cron.php or install.php.
if (req.url ~ "^/(cron|install)\.php(\?.*)?$" && !client.ip ~ privileged) {
// Have Varnish throw the error directly
error 404 "Page not found.";
// Use a custom error page
# set req.url = "/404";
}
// Handle compression correctly to get more cache hits.
if (req.http.Accept-Encoding) {
if (req.http.Accept-Encoding ~ "gzip") {
// If the browser supports it, we'll use gzip.
set req.http.Accept-Encoding = "gzip";
} else if (req.http.Accept-Encoding ~ "deflate") {
// Next, try deflate if it is supported.
set req.http.Accept-Encoding = "deflate";
} else {
// Unknown algorithm. Remove it and send unencoded.
unset req.http.Accept-Encoding;
}
}
// Do not cache these URI's.
if (req.url ~ "^/update\.php$" ||
req.url ~ "^/cron\.php$" ) {
return(pass);
}
}
sub vcl_fetch {
// Allow stale content if backend server is slow or down.
set beresp.grace = 6h;
// Don't allow static files to set cookies.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$") {
unset beresp.http.set-cookie;
}
}
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
if (req.url !~ "^/?$") {
// Try to redirect to the homepage, which is more likely to be cached.
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 {"
</head>
<body onload="setTimeout(function() { window.location = 'http://"} req.http.host {"/' }, 5000)">
<h1>Error "} obj.status " " obj.response {"</h1>
<p>"} obj.response {"</p>
<p>XID: "} req.xid {"</p>
<p>Redirecting to http://"} req.http.host {"/ in 5 seconds</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
"};
} else {
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>
</head>
<body>
<h1>Error "} obj.status " " obj.response {"</h1>
<p>"} obj.response {"</p>
<p>XID: "} req.xid {"</p>
<hr>
<p>Varnish cache server/p>
</body>
</html>
"};
}
return(deliver);
}