Назад | Перейти на главную страницу

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

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

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

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

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 минут, не ставить их в очередь»

Узнать больше на https://stackoverflow.com/questions/12691489/varnish-hit-for-pass-means

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

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 секунд.