Created
January 9, 2016 19:28
-
-
Save sjehutch/7c855b61bab8b478b33d to your computer and use it in GitHub Desktop.
Varnish VCL Wordpress - 1. sudo cp /etc/varnish/default.vcl /etc/varnish/default.vcl.bak 2. sudo vi /etc/varnish/default.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
/* SET THE HOST AND PORT OF WORDPRESS | |
* *********************************************************/ | |
backend default { | |
.host = "127.0.0.1"; | |
.port = "8080"; | |
} | |
# SET THE ALLOWED IP OF PURGE REQUESTS | |
# ########################################################## | |
acl purge { | |
"localhost"; | |
"162.243.20.190"; | |
} | |
# THE RECV FUNCTION | |
# ########################################################## | |
sub vcl_recv { | |
# For Testing: If you want to test with Varnish passing (not caching) uncomment | |
# return( pass ); | |
# FORWARD THE IP OF THE REQUEST | |
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; | |
} | |
} | |
# CLEAN UP THE ENCODING HEADER. | |
# SET TO GZIP, DEFLATE, OR REMOVE ENTIRELY. WITH VARY ACCEPT-ENCODING | |
# VARNISH WILL CREATE SEPARATE CACHES FOR EACH | |
# DO NOT ACCEPT-ENCODING IMAGES, ZIPPED FILES, AUDIO, ETC. | |
# ########################################################## | |
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"; | |
} elsif (req.http.Accept-Encoding ~ "deflate") { | |
set req.http.Accept-Encoding = "deflate"; | |
} else { | |
# unknown algorithm | |
remove req.http.Accept-Encoding; | |
} | |
} | |
# IF THIS IS A PURGE REQUEST, THEN CHECK THE IPS SET ABOVE | |
# BLOCK IF NOT ONE OF THOSE IPS | |
# ########################################################## | |
if (req.request == "PURGE") { | |
if ( !client.ip ~ purge ) { | |
error 405 "Not allowed."; | |
} | |
return (lookup); | |
} | |
# PIPE ALL NON-STANDARD REQUESTS | |
# ########################################################## | |
if (req.request != "GET" && | |
req.request != "HEAD" && | |
req.request != "PUT" && | |
req.request != "POST" && | |
req.request != "TRACE" && | |
req.request != "OPTIONS" && | |
req.request != "DELETE") { | |
return (pipe); | |
} | |
# ONLY CACHE GET AND HEAD REQUESTS | |
# ########################################################## | |
if (req.request != "GET" && req.request != "HEAD") { | |
return (pass); | |
} | |
# OPTIONAL: DO NOT CACHE LOGGED IN USERS (THIS OCCURS IN FETCH TO, EITHER | |
# COMMENT OR UNCOMMENT BOTH | |
# ########################################################## | |
if ( req.http.cookie ~ "wordpress_logged_in" ) { | |
return( pass ); | |
} | |
# IF THE REQUEST IS NOT FOR A PREVIEW, WP-ADMIN OR WP-LOGIN | |
# THEN UNSET THE COOKIES | |
# ########################################################## | |
if ( | |
!(req.url ~ "wp-(login|admin)") | |
&& !(req.url ~ "&preview=true" ) | |
){ | |
unset req.http.cookie; | |
} | |
# IF BASIC AUTH IS ON THEN DO NOT CACHE | |
# ########################################################## | |
if (req.http.Authorization || req.http.Cookie) { | |
return (pass); | |
} | |
# LIST URLS NOT TO BE CACHED | |
# USUALLY THIS INCLUDES THE PREVIEW QUERY STRING, A NOCACHE | |
# QUERY STRING, AND FILES THAT WILL BE SERVED BY THE CDN | |
# SUCH AS IMAGES, CSS, AND JS. IF YOU ARE NOT USING A CDN | |
# YOU CAN CACHE YOUR STATIC RESOURCES TOO | |
# ########################################################## | |
if ( | |
req.url ~ "preview" | |
|| req.url ~ "nocache" | |
|| req.url ~ "\.css$" | |
|| req.url ~ "\.js$" | |
|| req.url ~ "\.jpg$" | |
|| req.url ~ "\.jpeg$" | |
|| req.url ~ "\.gif$" | |
|| req.url ~ "\.png$" | |
) { | |
return (pass); | |
} | |
# IF YOU GET HERE THEN THIS REQUEST SHOULD BE CACHED | |
# ########################################################## | |
return (lookup); | |
} | |
# HIT FUNCTION | |
# ########################################################## | |
sub vcl_hit { | |
# IF THIS IS A PURGE REQUEST THEN DO THE PURGE | |
# ########################################################## | |
if (req.request == "PURGE") { | |
purge; | |
error 200 "Purged."; | |
} | |
return (deliver); | |
} | |
# MISS FUNCTION | |
# ########################################################## | |
sub vcl_miss { | |
if (req.request == "PURGE") { | |
purge; | |
error 200 "Purged."; | |
} | |
return (fetch); | |
} | |
# FETCH FUNCTION | |
# ########################################################## | |
sub vcl_fetch { | |
# I SET THE VARY TO ACCEPT-ENCODING, THIS OVERRIDES W3TC | |
# TENDANCY TO SET VARY USER-AGENT. YOU MAY OR MAY NOT WANT | |
# TO DO THIS | |
# ########################################################## | |
set beresp.http.Vary = "Accept-Encoding"; | |
# IF NOT WP-ADMIN THEN UNSET COOKIES AND SET THE AMOUNT OF | |
# TIME THIS PAGE WILL STAY CACHED (TTL) | |
# ########################################################## | |
if (!(req.url ~ "wp-(login|admin)") && !req.http.cookie ~ "wordpress_logged_in" ) { | |
unset beresp.http.set-cookie; | |
set beresp.ttl = 96h; | |
} | |
if (beresp.ttl <= 0s || | |
beresp.http.Set-Cookie || | |
beresp.http.Vary == "*") { | |
set beresp.ttl = 120 s; | |
return (hit_for_pass); | |
} | |
return (deliver); | |
} | |
# DELIVER FUNCTION | |
# ########################################################## | |
sub vcl_deliver { | |
# IF THIS PAGE IS ALREADY CACHED THEN RETURN A 'HIT' TEXT | |
# IN THE HEADER (GREAT FOR DEBUGGING) | |
# ########################################################## | |
if (obj.hits > 0) { | |
set resp.http.X-Cache = "HIT"; | |
# IF THIS IS A MISS RETURN THAT IN THE HEADER | |
# ########################################################## | |
} else { | |
set resp.http.X-Cache = "MISS"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment