files: "/etc/varnish/default.vcl": mode: "000444" owner: root group: root content: | # HOST AND PORT. ########################################################################## backend default { .host = "127.0.0.1"; .port = "81"; } # RECV FUNCTION ########################################################################## sub vcl_recv { # IF PURGE REQUEST CHECK PURGE TOKEN. if (req.request == "PURGE") { if (req.http.X-Purge-Token == "XXX") { return (lookup); } error 405 "Not allowed"; } # 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); } # FORWARD EVERYTHING TO WWW AT HTTPS TO AVOID CACHING HTTP REQUESTS. if ((req.http.host ~ "^(?i)(www\.)example.com" && req.http.X-Forwarded-Proto !~ "(?i)https") || req.http.host ~ "^(?i)example.com" ) { set req.http.X-Redir-Url = "https://www.example.com" + req.url; error 750 req.http.X-Redir-Url; } # NEVER CACHE ADMIN OR LOGIN. if (req.url ~ "^/wp-(admin|login|cron)") { return (pass); } # REMOVE THE WP TEST COOKIE. set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", ""); # DON'T CACHE IF USER LOGGED IN. if (req.http.Cookie ~ "wordpress_") { return (pass); } # UNSET ALL COOKIES. unset req.http.Cookie; # IF WE MADE IT HERE WE WANT TO SERVE CACHED FILE. return (lookup); } # HIT FUNCTION ########################################################################## sub vcl_hit { if (req.request == "PURGE") { purge; error 200 "Purged"; } } # MISS FUNCTION ########################################################################## sub vcl_miss { if (req.request == "PURGE") { purge; error 200 "Purged"; } } # FETCH FUNCTION ########################################################################## sub vcl_fetch { set beresp.ttl = 1h; } # DELIVER FUNCTION ########################################################################## sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; } else { set resp.http.X-Cache = "MISS"; } } # ERROR FUNCTION ########################################################################## sub vcl_error { if (obj.status == 750) { set obj.http.Location = obj.response; set obj.status = 301; return (deliver); } }