Varnish cache server – Guru Meditation 503 …
Recently, i face this annoying error with my varnish cache server
Error 503 Service Unavailable
Service Unavailable
Guru Meditation:
XID: 1937610824
Varnish cache server
this issue scared me ๐ , because everything has been working well with varnish cache server. luckily, i had this issue at the moment i deployed a new feature that will send a big file over http protocol with content type = ‘application/octet-stream’.
from this point, i suspected that varnish cache server has something to do with large file transfer over http. so the question is : how to ignore varnish cache in such case ?
after googling and studying varnish cache, i found that we can do it with a simple rule. this rule returns pipe – AKA : content from back end server directly to client
# bypass export CSV , you can replace your url pattern with /exportlimit/all/ if ( req.url ~ ".*/exportlimit/all/.*" ) { set req.http.connection = "close"; return(pipe); }
this is where it should be in varnish VCL file (/etc/varnsih/default.vcl or else where you specified)
sub vcl_recv { 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; } } if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE" && req.request != "PURGE") { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } # bypass export CSV if ( req.url ~ ".*/exportlimit/all/.*" ) { set req.http.connection = "close"; return(pipe); } # purge request if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } ban("obj.http.X-Purge-Host ~ " + req.http.X-Purge-Host + " && obj.http.X-Purge-URL ~ " + req.http.X-Purge-Regex + " && obj.http.Content-Type ~ " + req.http.X-Purge-Content-Type); error 200 "Purged."; } # switch to admin backend configuration if (req.http.cookie ~ "adminhtml=") { set req.backend = admin; }
remember to restart/reload varnish cache server after having it planted in the VCL file
service varnish restart