detecta código de retorno (modo) no gancho de verniz

1

Em vcl_recv , decido se será aprovado ou pesquisado com base na existência de um cookie:

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

Em vcl_fetch , ajustei o cache de algumas páginas:

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);
}

Como posso saber dentro de vcl_fetch se estou no modo de aprovação ou de pesquisa? Eu gostaria de ser capaz de evitar a execução do "bloco de regras personalizadas" se eu estiver no modo de pesquisa, porque os usuários conectados de qualquer maneira serão executados no modo de aprovação, de modo que essas regras não se apliquem a eles.

    
por cherouvim 19.07.2013 / 11:13

1 resposta

2

Você sempre pode definir um cabeçalho personalizado em 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);
}

Mas eu acho que será muito mais limpo colocar seu login em vcl_pass [1] ou apenas executar sua verificação original em 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] link

    
por 22.07.2013 / 17:41