Varnish Cache - по умолчанию TTL?

23

Я обнаружил, что я могу установить TTL в Varnish следующим образом в моем файле VCL:

sub vcl_fetch {
    # 1 minute
    set obj.ttl = 1m;
}

Но какова настройка по умолчанию (при условии, что внутренний сервер не устанавливает заголовок управления кэшем)?

Ade
источник
Похоже, я нашел ответ: 120 секунд - это логика VCL по умолчанию.
Ade

Ответы:

24

Это в шаблоне по умолчанию:

sub vcl_fetch {
    if (beresp.ttl <= 0s ||
        beresp.http.Set-Cookie ||
        beresp.http.Vary == "*") {
                /*
                 * Mark as "Hit-For-Pass" for the next 2 minutes
                 */
                set beresp.ttl = 120 s;
                return (hit_for_pass);
    }
    return (deliver);
}

Итак, 120 секунд.

Барт Де Вос
источник
Где вы нашли шаблон по умолчанию?
Нил
Существует default.vcl, который поставляется с лаком как минимум 3.0.3, в котором закомментированы все стандартные функции конфигурации. Конфигурацию по умолчанию 4.0 можно посмотреть здесь: github.com/mattiasgeniar/varnish-4.0-configuration-templates/…
th3morg
2
Это не отражает мои наблюдения. Это правда, что ttl по умолчанию составляет 120 секунд, но источником этого числа не может быть этот фрагмент. Если бы это было так, объекты без ttl были бы помечены как hit_for_pass, но они фактически остаются в кэше в течение 120 секунд.
Kritzefitz
Вы найдете источник встроенного vcl здесь - github.com/varnishcache/varnish-cache/blob/master/bin/varnishd/… . Используйте varnish-<version>теги, чтобы увидеть версию вашего релиза Varnish.
Дэнни Томас
34

TTL по умолчанию может быть передан через команду varnishd через -tпереключатель командной строки и, вероятно, получен из файла свойств в вашей файловой системе. О системе CentOS я смотрю на это устанавливается с помощью DEFAULT_TTLс /etc/sysconfig/varnish.

Вы можете увидеть живую настройку, используя varnishadm, например,

varnishadm param.show default_ttl

На самом деле, следующая логика VCL по умолчанию относится к некэшируемым объектам.

  sub vcl_fetch {
      if (beresp.ttl <= 0s ||
          beresp.http.Set-Cookie ||
          beresp.http.Vary == "*") {
                  /*
                   * Mark as "Hit-For-Pass" for the next 2 minutes
                   */
                  set beresp.ttl = 120 s;
                  return (hit_for_pass);
      }
      return (deliver);
  }

означает «если объект не кешируется - передайте клиентские запросы для этого объекта напрямую и одновременно на 2 минуты, не ставьте их в очередь»

Узнайте больше на /programming/12691489/varnish-hit-for-pass-means

Сергей Аликов
источник