Varnish 3.0返回503错误

时间:2012-06-13 16:51:55

标签: caching varnish varnish-vcl

我正在使用清漆来缓存我网站的内容。它按照预期工作,但存在问题。随机它会返回503错误,这真的很奇怪,因为app服务器还可以,负载低于.8,数据库服务器也可以。以下是我配置的一部分:

backend app05 {
  .host = "app05.site.com";
  .port = "80";
  .connect_timeout = 0.7s;
  .first_byte_timeout = 30s;
  .between_bytes_timeout = 30s;
  .probe = {
    .url = "/";
    .interval = 5s;
    .timeout = 1s;
    .window = 5;
    .threshold = 3;
  }
}

director app_director round-robin {
  { .backend = app01; }
  { .backend = app02; }
  { .backend = app03; }
  { .backend = app04; }
  { .backend = app05; }   
}

sub vcl_fetch {

  # remove all cookies
  # unset beresp.http.set-cookie;

  # cache for 12 hours
  # set beresp.ttl = 2h;

  # Don't allow static files to set cookies.
  if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm|mp4|flv)(\?[a-z0-9]+)?$") {
    unset beresp.http.set-cookie;
    set beresp.ttl = 12h;
  } else {
    set beresp.ttl = 30m;
  }

  # If the backend server doesn't return properly, don't send another connection to it
  # for 60s and try another backend via restart.
  #
  # https://www.varnish-cache.org/docs/trunk/tutorial/handling_misbehaving_servers.html
  # --
  if(beresp.status == 500) {
    set beresp.saintmode = 5m;
    if (req.request != "POST") {
      return(restart);
    } else {
      error 500 "Failed";
    }
  }

  # Allow items to be stale if needed.
  set beresp.grace = 1h;

}

我是否还必须添加if beresp.status == 503?

1 个答案:

答案 0 :(得分:4)

我解决了这个问题。我只需要增加连接到期的时间并检查重新连接的次数。以下是我添加的行:

host = "app01.site.com";
  .port = "80";
  .connect_timeout = 1.5s;
  .first_byte_timeout = 45s;
  .between_bytes_timeout = 30s;

if (req.restarts > 3) {
  set beresp.saintmode = 5m;
}