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

Reply via email to