Answer the question
In order to leave comments, you need to log in
Why isn't Varnish refreshing the page for users?
Hello,
I'm using a bunch of NGINX + PHP5 + VARNISH + Wordpresss , but apparently Varnish is not fully configured. The problem is that the site is updated for ordinary users from 30 minutes to an hour. At that time if you sit on the site as an administrator site updates take effect immediately.
Here are the Varnisha settings - default.vcl:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
# Drop any cookies sent to WordPress.
sub vcl_recv {
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;
}
}
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 cookies set by Google Analytics (pattern: '__utmABC')
if (req.http.Cookie) {
set req.http.Cookie = regsuball(req.http.Cookie,
"(^|; ) *__utm.=[^;]+;? *", "\1");
if (req.http.Cookie == "") {
remove req.http.Cookie;
}
}
# always pass through POST requests and those with basic auth
if (req.http.Authorization || req.request == "POST") {
return (pass);
}
# Do not cache these paths
if (req.url ~ "^/wp-cron\.php$" ||
req.url ~ "^/xmlrpc\.php$" ||
req.url ~ "^/wp-admin/.*$" ||
req.url ~ "^/wp-includes/.*$" ||
req.url ~ "\?s=") {
return (pass);
}
if (req.url ~ "preview=true") {
return(pass);
}
# logged in users must always pass
if( req.url ~ "^/wp-(login|admin)|sa28nvxkuf5d" || req.http.Cookie ~ "wordpress_logged_in_" ){
return (pass);
}
# Define the default grace period to serve cached content
set req.grace = 30s;
# accept purges from w2tc and varnish http purge
if (req.request == "PURGE") {
return (lookup);
}
# don't cache search results
if( req.url ~ "\?s=" ){
return (pass);
}
# bypass export CSV , you can replace your url pattern with /exportlimit/all/
if ( req.url ~ ".*/exportlimit/all/.*" ) {
set req.http.connection = "close";
return(pipe);
}
if (!(req.url ~ "wp-(login|admin)|sa28nvxkuf5d")) {
unset req.http.cookie;
}
# By ignoring any other cookies, it is now ok to get a page
unset req.http.Cookie;
return (lookup);
}
# Drop any cookies WordPress tries to send back to the client.
sub vcl_fetch {
# remove some headers we never want to see
unset beresp.http.Server;
unset beresp.http.X-Powered-By;
# don't cache search results
if( req.url ~ "\?s=" ){
return (hit_for_pass);
}
if (!(req.url ~ "wp-(login|admin)|sa28nvxkuf5d")) {
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);
}
# If our backend returns 5xx status this will reset the grace time
# set in vcl_recv so that cached content will be served and
# the unhealthy backend will not be hammered by requests
if (beresp.status == 500) {
set beresp.grace = 60s;
return (restart);
}
# GZip the cached content if possible
if (beresp.http.content-type ~ "text") {
set beresp.do_gzip = true;
}
# if nothing abovce matched it is now ok to cache the response
set beresp.ttl = 24h;
return (deliver);
}
sub vcl_miss {
# Set up invalidation of the cache so purging gets done properly
if (req.request == "PURGE") {
purge;
error 200 "Purged.";
}
return (fetch);
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question