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.