From 7d9f867b94b53b5fb4f12734ea6960e0201ee9a4 Mon Sep 17 00:00:00 2001 From: Tatuya Kamada <tatuya@nexedi.com> Date: Fri, 20 Apr 2012 17:15:32 +0900 Subject: [PATCH] Revert "Introduce the best practices from erp5 public web sites experience." This reverts commit 1ed2b68202a2e79db45f669767959f76b84f1a6c. --- .../generic_varnish/template/default.vcl.in | 247 +++++++----------- 1 file changed, 92 insertions(+), 155 deletions(-) diff --git a/slapos/recipe/generic_varnish/template/default.vcl.in b/slapos/recipe/generic_varnish/template/default.vcl.in index 220bc446c..0a792e083 100644 --- a/slapos/recipe/generic_varnish/template/default.vcl.in +++ b/slapos/recipe/generic_varnish/template/default.vcl.in @@ -5,183 +5,120 @@ #server. # backend default { - .host = "%(backend_server)s"; - .port = "%(backend_port)s"; - .probe = { - .timeout = 30s; - .interval = 5s; - .window = 4; - .threshold = 3; - .request = - "OPTIONS /erp5/getId HTTP/1.1" - "Host: %(backend_server)s:%(backend_port)s" - "Accept-Encoding: identity" - "Connection: close" - "User-Agent: Varnish"; - } + .host = "%(backend_server)s"; + .port = "%(backend_port)s"; + .probe = { + .timeout = 30s; + .interval = 5s; + .window = 4; + .threshold = 3; + .request = + "OPTIONS /erp5/getId HTTP/1.1" + "Host: %(backend_server)s:%(backend_port)s" + "Accept-Encoding: identity" + "Connection: close" + "User-Agent: Varnish"; + } } +# +#Below is a commented-out copy of the default VCL logic. If you +#redefine any of these subroutines, the built-in logic will be +#appended to your code. +# -# Called at the beginning of a request, after the complete request has been received and parsed sub vcl_recv { - # Force lookup if the request is a no-cache request from the client - if (req.http.cache-control ~ "no-cache") { - ban_url(req.url); - } - # Pass any requests that Varnish does not understand straight to the backend. - if (req.request != "GET" && - req.request != "HEAD" && - req.request != "PUT" && - req.request != "POST" && - req.request != "TRACE" && - req.request != "OPTIONS" && - req.request != "PURGE" && - req.request != "DELETE") { - /* Non-RFC2616 or CONNECT which is weird. */ - return(pipe); - } - # Pass anything other than GET and HEAD and PURGE directly. - if (req.request != "GET" && req.request != "HEAD" && req.request != "PURGE") { - /* We only deal with GET and HEAD by default */ - return(pass); - } - if (req.http.Authorization) { - /* Not cacheable by default */ - return (pass); - } - - # no need to have cookies for the resources - if (req.url ~ "\.(css|js|ico)$") { - unset req.http.cookie; - } - # remove bogus cookies - if (req.http.Cookie) { - set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm.=[^;]+;? *", "\1"); - set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__ac_name=\x22\x22;? *", "\1"); - set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__ac=\x22Og.3D.3D\x22;? *", "\1"); - } - if (req.http.Cookie == "") { - remove req.http.Cookie; - } - if (req.http.Cookie && req.http.Cookie ~ "(^|; ) *__ac=") { - /* Not cacheable for authorised users, - but KM images are cacheable */ - if (!(req.url ~ "/km_img/.*\.(png|gif)$")) { - return (pass); - } - } - # XXX Is it OK to remove this of all the case? - remove req.http.Set-Cookie; - - if (req.http.Accept-Encoding) { - if (req.http.Accept-Encoding ~ "gzip") { - set req.http.Accept-Encoding = "gzip"; - } elsif (req.http.Accept-Encoding ~ "deflate") { - set req.http.Accept-Encoding = "deflate"; - } else { - # unkown algorithm - remove req.http.Accept-Encoding; - } - } - # We do not care about Accept-Language, this is url controlled - remove req.http.Accept-Language; - - ## XXX login form can defer based on __ac_name cookie value - if (req.url ~ "/(login_form|WebSite_viewLoginDialog)($|\?)") { - return (pass); - } - - if (req.backend.healthy) { - set req.grace = 1h; + if (req.request != "GET" && + req.request != "HEAD" && + req.request != "PUT" && + req.request != "POST" && + req.request != "TRACE" && + req.request != "OPTIONS" && + req.request != "PURGE" && + req.request != "DELETE") { + /* Non-RFC2616 or CONNECT which is weird. */ + return(pipe); + } + if (req.request != "GET" && req.request != "HEAD" && req.request != "PURGE") { + /* We only deal with GET and HEAD by default */ + return(pass); + } + remove req.http.Cookie; + remove req.http.Set-Cookie; + if (req.http.Accept-Encoding) { + if (req.http.Accept-Encoding ~ "gzip") { + set req.http.Accept-Encoding = "gzip"; + } elsif (req.http.Accept-Encoding ~ "deflate") { + set req.http.Accept-Encoding = "deflate"; } else { - set req.grace = 1w; - } - return(lookup); + # unkown algorithm + remove req.http.Accept-Encoding; + } + } + # Force deflate + remove req.http.Accept-Encoding; + # We do not care about Accept-Language, this is url controlled + remove req.http.Accept-Language; + #if (req.request == "PURGE") { + # if (!client.ip ~ purge) { + # error 405 "Not allowed."; + # } + # purge_url(req.url); + # error 200 "HASHPURGED"; + # unset req.http.x; + #} + set req.grace = 30d; + return(lookup); } -# Creates the varnish cache key by the url sub vcl_hash { hash_data(req.url); return(hash); } -# Called after a cache lookup if the requested document was found in the cache sub vcl_hit { - # According Vary Header do not return those headers - remove req.http.Accept-Language; - remove req.http.Accept-Encoding; - remove req.http.Cookie; - return(deliver); + #if (req.request == "PURGE" && client.ip ~ purge) { + # set obj.ttl = 0s; + # error 200 "Purged."; + #} + + #if (client.ip ~ purge){ + # # Force refresh from localhost + # set obj.ttl = 0s; + # return (restart); + #} + # According Vary Header do not return those headers + remove req.http.Accept-Language; + remove req.http.Accept-Encoding; + remove req.http.Cookie; + return(deliver); } -# Called after a cache lookup if the requested document was not found in the cache sub vcl_miss { return(fetch); } -# Called after a document has been successfully retrieved from the backend sub vcl_fetch { - # we only cache 200 (OK) and 304 (Not Modified) responses. - if (beresp.status != 200 && beresp.status != 304) { - set beresp.ttl = 0s; - } - - if (beresp.http.cache-control ~ "no-cache") { - set beresp.ttl = 0s; - } - - if (beresp.ttl == 0s) { - unset beresp.http.expires; - set beresp.http.cache-control = "no-cache"; - return(hit_for_pass); - } - - # we don't care haproxy's cookie. - if (beresp.http.Set-Cookie && beresp.http.Set-Cookie !~ "^SERVERID=[^;]+; path=/$") { - return(hit_for_pass); - } - - if (req.url ~ "\.(css|js|ico)$") { - unset beresp.http.set-cookie; - set beresp.http.cache-control = regsub(beresp.http.cache-control, "^", "public,"); - set beresp.http.cache-control = regsub(beresp.http.cache-control, ",$", ""); - } - - # remove some headers added by caching policy manager to avoid - # '304 Not Modified' in case of login <-> logout switching. - if (beresp.http.content-type ~ "^text/html") { - unset beresp.http.last-modified; - } - - set beresp.grace = 1w; /* Never send request to backend even if client ask refreshed content */ if (beresp.ttl > 0s) { - /* Setup grace period for 30days for all cacheable contents */ - set beresp.grace = 30d; - /* Remove Expires from backend, it's not long enough */ - unset beresp.http.expires; - # /* Set the clients TTL on this object */ - # set beresp.http.cache-control = "max-age = 300"; - /* Set how long Varnish will keep it */ - set beresp.ttl = 1w; - /* marker for vcl_deliver to reset Age: */ - set beresp.http.magicmarker = "1"; - } + /* Setup grace period for 30days for all cacheable contents */ + #set req.grace = 30d; + set beresp.grace = 30d; + } + return(deliver); + } - return(deliver); -} -# Called before a cached object is delivered to the client sub vcl_deliver { - if (resp.http.magicmarker) { - /* Remove the magic marker */ - unset resp.http.magicmarker; - /* By definition we have a fresh object */ - set resp.http.age = "0"; - } - if (obj.hits > 0) { - set resp.http.X-Cache = obj.hits; - } else { - set resp.http.X-Cache = "MISS"; - } - return(deliver); + if (obj.hits > 0) { + set resp.http.X-Cache = obj.hits; + } else { + set resp.http.X-Cache = "MISS"; + } + #if (obj.hash) { + # set resp.http.X-Hash = obj.hash; + #} else { + # set resp.http.X-Hash = "No hash"; + #} + + return(deliver); } -- 2.30.9