Конфигурация лака только к кэшу для незарегистрированных пользователей

Я просто видел, что TechNet имеет обновленную Книгу доступную для скачивания.

5
задан 17 July 2009 в 17:57
2 ответа

Хорошо, в конце мне удалось решить это использование следующего vcl файла. Обратите внимание, что я добавил несколько дополнительных битов для разрешения изящества истечения кэша, когда бэкенд умер.

Кажется, что мой основной отказ использовал unset req.http.Set-Cookie; когда я должен был использовать unset obj.http.Set-Cookie; в vcl_fetch раздел. (obj в vcl_fetch и req в разделе vcl_recv).

director rails_director round-robin {
  { 
    .backend = { 
      .host = "xxx.xxx.xxx.xxx"; 
      .port = "http";
      .probe = {
        .url = "/lbcheck/lbuptest";
        .timeout = 0.3 s;
        .window = 8;
        .threshold = 3;
      }
    } 
  }
}

sub vcl_recv {

  if (req.backend.healthy) {
    set req.grace = 30s;
  } else {
    set req.grace = 1h;
  }

  if (req.url ~ "^/login") {
    pipe;
  }

  if (req.url ~ "^/sessions") {
    pipe;
  }

  if (req.url ~ "\.(css|js|jpg|jpeg|gif|ico|png)\??\d*$") {
    unset req.http.cookie;
    lookup;
  } else {
    if (req.http.cookie ~ "user_credentials") {
      pipe;
    } else {
      unset req.http.cookie;
    }
  }

  # Only cache GET and HEAD requests
  if (req.request != "GET" && req.request != "HEAD") {
    pipe;
  }

}

sub vcl_fetch {

  set obj.grace = 1h;

  if (req.url ~ "^/login") {
    pass;
  }

  if (req.url ~ "^/sessions") {
    pass;
  }

  if (req.http.cookie ~ "user_credentials") {
    pass;
  } else {
    unset obj.http.Set-Cookie;
  }

  # cache CSS and JS files
  if (req.url ~ "\.(css|js|jpg|jpeg|gif|ico|png)\??\d*$") {
    unset obj.http.Set-Cookie;
  } 

  if (obj.status >=400 && obj.status <500) {
    error 404 "File not found";
  }

  if (obj.status >=500 && obj.status <600) {
    error 503 "File is Temporarily Unavailable";
  }

}

sub vcl_deliver {
  if (obj.hits > 0) {
          set resp.http.X-Cache = "HIT";
  } else {
          set resp.http.X-Cache = "MISS";
  }
}
6
ответ дан 3 December 2019 в 01:35

Я не могу прокомментировать, таким образом, я отправляю это как ответ.

Внимание: С 2.1.0, obj.* назван beresp.* в vcl_fetch и obj.* теперь только для чтения.

Они также кажутся лучше помещенный в vcl_recv вместо vcl_fetch:

  if (req.url ~ "^/login") {
    pipe;
  }

  if (req.url ~ "^/sessions") {
    pipe;
  }

Наконец, в Вас определение бэкенда, добавил бы я

.max_connections = 32;

Корректируйтесь к количеству пассажирских бэкендов, которые Вы позволили nginx/apache создавать. Если Вы не устанавливаете этот предел, необходимо следить за Вами пассажирская глобальная очередь (предполагающий использование пассажира).

0
ответ дан 3 December 2019 в 01:35

Теги

Похожие вопросы