Created
November 30, 2011 13:11
-
-
Save joehoyle/1409012 to your computer and use it in GitHub Desktop.
WordPress VCL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
backend default { | |
.host = "127.0.0.1"; | |
.port = "8080"; | |
} | |
sub vcl_recv { | |
# set standard proxied ip header for getting original remote address | |
set req.http.X-Forwarded-For = client.ip; | |
if (req.request == "PURGE") { | |
return (lookup); | |
} | |
# logged in users must always pass | |
if( req.url ~ "^/wp-(login|admin)" || req.http.Cookie ~ "wordpress_logged_in_" || req.url ~ "bb-(login|admin)" || req.url ~ "register" ) { | |
return (pass); | |
} | |
# don't cache search results | |
if( req.url ~ "\?s=" ){ | |
return (pass); | |
} | |
# always pass through posted requests and those with basic auth | |
if ( req.request == "POST" || req.http.Authorization ) { | |
return (pass); | |
} | |
# else ok to fetch a cached page | |
unset req.http.Cookie; | |
return (lookup); | |
} | |
sub vcl_fetch { | |
# remove some headers we never want to see | |
unset beresp.http.Server; | |
unset beresp.http.X-Powered-By; | |
# only allow cookies to be set if we're in admin area - i.e. commenters stay logged out | |
if( beresp.http.Set-Cookie && req.url !~ "^/wp-(login|admin)" && req.url !~ "bb-(login|admin)" && req.url !~ "register" ){ | |
unset beresp.http.Set-Cookie; | |
} | |
# don't cache response to posted requests or those with basic auth | |
if ( req.request == "POST" || req.http.Authorization ) { | |
return (hit_for_pass); | |
} | |
# only cache status ok | |
if ( beresp.status != 200 ) { | |
return (hit_for_pass); | |
} | |
# don't cache search results | |
if( req.url ~ "\?s=" ){ | |
return (hit_for_pass); | |
} | |
# else ok to cache the response | |
set beresp.ttl = 10m; | |
return (deliver); | |
} | |
sub vcl_deliver { | |
# add debugging headers, so we can see what's cached | |
if (obj.hits > 0) { | |
set resp.http.X-Cache = "HIT"; | |
} | |
else { | |
set resp.http.X-Cache = "MISS"; | |
} | |
# remove some headers added by varnish | |
unset resp.http.Via; | |
unset resp.http.X-Varnish; | |
} | |
sub vcl_hash { | |
hash_data( req.url ); | |
# altering hash so subdomains are ignored. | |
# don't do this if you actually run different sites on different subdomains | |
if ( req.http.host ) { | |
hash_data( regsub( req.http.host, "^([^\.]+\.)+([a-z]+)$", "\1\2" ) ); | |
} else { | |
hash_data( server.ip ); | |
} | |
# ensure separate cache for mobile clients (WPTouch workaround) | |
if( req.http.User-Agent ~ "(iPod|iPhone|incognito|webmate|dream|CUPCAKE|WebOS|blackberry9\d\d\d)" ){ | |
hash_data("touch"); | |
} | |
return (hash); | |
} | |
sub vcl_hit { | |
if (req.request == "PURGE") { | |
purge; | |
error 200 "Purged."; | |
} | |
} | |
sub vcl_miss { | |
if (req.request == "PURGE") { | |
purge; | |
error 200 "Purged."; | |
} | |
} | |
sub vcl_error { | |
set obj.http.Content-Type = "text/html; charset=utf-8"; | |
set obj.http.Retry-After = "5"; | |
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> | |
<h3>Guru Meditation:</h3> | |
<p>XID: "} + req.xid + {"</p> | |
<hr> | |
<p>Varnish cache server</p> | |
</body> | |
</html> | |
"}; | |
return (deliver); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment