Alguém pode explicar este pedaço de sub_recv de VCL no Varnish 3.x?

1

Eu tenho procurado em alguns exemplos de arquivos VCL para o Varnish 3.x e eu tropecei nessa peça algumas vezes, e isso tem me feito coçar a cabeça:

sub vcl_recv {

...

  if (req.request != "GET" &&
      req.request != "HEAD" &&
      req.request != "PUT" &&
      req.request != "POST" &&
      req.request != "TRACE" &&
      req.request != "OPTIONS" &&
      req.request != "DELETE") {
    return (pipe);
  }

...
}

Basicamente, não vejo qual seria o objetivo de canalizar as solicitações desconhecidas de back-end? Isso é apenas no caso de algum aplicativo / protocolo da web estranho, então funcionaria?

Por que é melhor canalizar essa solicitação do que "passá-la"?

Eu adoraria se alguém pudesse explicar o uso dessa peça.

    
por Julio J. 24.03.2014 / 21:39

1 resposta

1

A instrução pass faz o Varnish agir como um proxy reverso da camada 7 clássica, encaminhando o tráfego lendo e reproduzindo cada solicitação, uma a uma.

A instrução pipe faz com que o Varnish funcione como um proxy HTTP CONNECT , transmitindo o tráfego byte-by -byte para e do servidor backend.

Se o método de solicitação não for conhecido, o Varnish pode não saber como interpretar e manipular cada solicitação. Nesse caso, talvez você não queira tocá-lo, portanto, os exemplos de VCL que você vê.

WebSocket é um ótimo exemplo ( dos documentos ):

sub vcl_pipe {
     if (req.http.upgrade) {
         set bereq.http.upgrade = req.http.upgrade;
     }
}
sub vcl_recv {
     if (req.http.Upgrade ~ "(?i)websocket") {
         return (pipe);
     }
}

vcl_pipe é chamado no início da transmissão e garante que o servidor backend receba a instrução de cabeçalho HTTP Upgrade e alterne para WebSocket antes de continuar.

    
por 24.03.2014 / 22:14

Tags