varnish и no-cache

От разработчиков поступил запрос, чтобы varnish не кешировал страницы с заголовком Cache-control: no-cache. После некоторых поисков, обнаружил, что версия 4.0, которую мы используем, должна уметь это из коробки, как видно из этого коммита. Увы, мой 4.0.3 из epel такого не делал, неясно по какой причине. Решение с vcl нашлось только для 3 версии:

sub vcl_fetch {
  if (req.http.Cache-Control ~ "(private|no-cache|no-store)" || req.http.Pragma == "no-cache") {
    return (pass);
  }
}

В 4 версии поменялись названия переменных и vcl, так что после некоторых замен конструкция выглядит так:

sub vcl_backend_response {
  if (beresp.http.Cache-Control ~ "(private|no-cache|no-store)" || beresp.http.Pragma == "no-cache") {
    set beresp.uncacheable = true;
  }
}

Либо поместить это в уже существующий vcl_backend_response. Вроде бы работает. 🙂