Have you changed the default grace (10s)? -- Guillaume Quintard
On Sun, Sep 17, 2017 at 8:36 PM, Vassilis Aretakis <[email protected]> wrote: > I have a setup which was working on Varnish 3.0 but not with 4.1 > > The stale pages where servered in case the backends where sick. But I > cannot make this work with varnish 4. > Can you help me to make it serve the cached pages in case backends are > gone? > also session-cookies can be removed/ignored > > My config is: > > > vcl 4.0; > import directors; > import std; > > backend b1 { > .host = > .port = "80"; > .first_byte_timeout = 180s; > .between_bytes_timeout = 120s; > .probe = { > .url = "/healthy_check/d.php"; > .interval = 10s; > .timeout = 2 s; > .window = 7; > .threshold = 1; > } > } > > > backend b2 { > .host = > .port = "80"; > .first_byte_timeout = 180s; > .between_bytes_timeout = 120s; > .probe = { > .url = "/healthy_check/d.php"; > .interval = 10s; > .timeout = 2 s; > .window = 7; > .threshold = 1; > } > } > > > sub vcl_init { > new vdir = directors.round_robin(); > vdir.add_backend(b1); > vdir.add_backend(b2); > } > > sub vcl_recv { > > set req.backend_hint = vdir.backend(); > > #Ignore adminpanel > if (req.url == "^/adminpanel/.*" || > req.url == "^/adminApplication/.*" || > req.url ~ "^/adminApplication/" || > req.url ~ "^/adminpanel/" || > req.url ~ "^/newsfeed.php" || > req.url ~ "^/comment") { > return (pass); # unset req.http.Cookie; > } > > if (req.method != "GET" && > req.method != "HEAD" && > req.method != "PUT" && > req.method != "POST" && > req.method != "TRACE" && > req.method != "OPTIONS" && > req.method != "DELETE") { > /* Non-RFC2616 or CONNECT which is weird. */ > return (pipe); > } > if (req.method != "GET" && req.method != "HEAD") { > /* We only deal with GET and HEAD by default */ > return (pass); > } > #set req.http.grace = "none"; > > return (hash); > } > > sub vcl_pipe { > > return (pipe); > } > > sub vcl_pass { > return (fetch); > } > > sub vcl_hit { > if (obj.ttl >= 0s) { > # normal hit > return (deliver); > } > # We have no fresh fish. Lets look at the stale ones. > if (std.healthy(req.backend_hint)) { > # Backend is healthy. Limit age to 10s. > if (obj.ttl + 10s > 0s) { > set req.http.grace = "normal(limited)"; > return (deliver); > } else { > # No candidate for grace. Fetch a fresh object. > return(fetch); > } > } else { > # backend is sick - use full grace > if (obj.ttl + obj.grace > 0s) { > set req.http.grace = "full"; > return (deliver); > } else { > # no graced object. > return (fetch); > } > } > } > > sub vcl_miss { > return (fetch); > } > > sub vcl_backend_fetch { > set bereq.backend = vdir.backend(); > } > > sub vcl_backend_response { > # Happens after we have read the response headers from the backend. > # > # Here you clean the response headers, removing silly Set-Cookie headers > # and other mistakes your backend does. > unset beresp.http.set-cookie; set beresp.grace = 1h; > if (beresp.status > 500) { > return (retry); > } > if (bereq.url == "^/") { > set beresp.ttl = 60s; > } > > #jpeg caching (forced) > if (bereq.url ~ "\.(png|gif|PNG|JPG|JPEG|jpg|jpeg|swf|css|js)$" || > bereq.url ~ "\.(png|gif|PNG|JPG|JPEG|jpg|jpeg)&width.*" || > bereq.url ~ "\.(png|gif|PNG|JPG|JPEG|jpg|jpeg)?.*") { > set beresp.http.cache-control = "max-age = 2592000"; > } > return (deliver); > } > > sub vcl_hash { > hash_data(req.url); > if (req.http.host) { > hash_data(req.http.host); > } else { > hash_data(server.ip); > } > return (lookup); > } > > sub vcl_deliver { > set resp.http.grace = req.http.grace; > } > _______________________________________________ > varnish-misc mailing list > [email protected] > https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
_______________________________________________ varnish-misc mailing list [email protected] https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
