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

определить код возврата (режим) в лаке

В vcl_recv Я решаю, передать или выполнить поиск в зависимости от наличия файла cookie:

sub vcl_recv {
    if (req.http.Cookie ~ "(JSESSIONID=)" ) {
            /* do not cache logged in users */
            return (pass);
    }
    return (lookup);
}

В vcl_fetch Я тонко настраиваю кеширование для некоторых страниц:

sub vcl_fetch {

    /* custom rules block */
    if (req.url ~ "^/foo") { set beresp.ttl=30s; }
    if (req.url ~ "^/bar") { set beresp.ttl=1m; }
    if (req.url ~ "^/123") { set beresp.ttl=10m; }

    return (deliver);
}

Как я могу знать внутри vcl_fetch нахожусь ли я в режиме прохождения или поиска? Я хотел бы иметь возможность избежать запуска «блока настраиваемых правил», если я нахожусь в режиме поиска, потому что зарегистрированные пользователи все равно будут работать в режиме прохода, поэтому эти правила к ним не применяются.

Вы всегда можете установить собственный заголовок в vcl_recv:

sub vcl_recv {
  if (req.http.Cookie ~ "(JSESSIONID=)" ) {
    /* do not cache logged in users */
    set req.http.x-my-mark = "passed";
    return (pass);
  }
  return (lookup);
}
#...
sub vcl_fetch {
  if (req.http.x-my-mark == "passed") {
    /* custom rules block */
    if (req.url ~ "^/foo") { set beresp.ttl=30s; }
    if (req.url ~ "^/bar") { set beresp.ttl=1m; }
    if (req.url ~ "^/123") { set beresp.ttl=10m; }
  }

  return (deliver);
}

Но я думаю, что будет намного чище поставить логин на vcl_pass[1] или просто выполните первоначальную проверку vcl_fetch:

sub vcl_fetch {
  if (req.http.Cookie ~ "(JSESSIONID=)") {
    /* custom rules block */
    if (req.url ~ "^/foo") { set beresp.ttl=30s; }
    if (req.url ~ "^/bar") { set beresp.ttl=1m; }
    if (req.url ~ "^/123") { set beresp.ttl=10m; }
  }

  return (deliver);
}

[1] https://www.varnish-software.com/static/book/VCL_functions.html#vcl-vcl-pass