O Nginx na frente do Varnish, às vezes, produz o erro “upstream prematuramente fechado durante a leitura do cabeçalho de resposta do upstream”

4

Eu tenho o Nginx (1.9.9) na frente do Varnish (4.1.0) no mesmo servidor.

//nginx
upstream varnish {
    server 127.0.0.1:8391;
    keepalive 16;
}

location ~ \.php$ {
     proxy_pass http://varnish;
     proxy_http_version 1.1; #for 1.0 varnish shows blank page
     proxy_set_header Connection "";
     proxy_redirect off;

     proxy_set_header Host $host:$server_port;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Forwarded-Proto $scheme;

     proxy_read_timeout 600;
     proxy_send_timeout 600;
     proxy_connect_timeout 600;
}

//varnish
DAEMON_OPTS="-a :8391 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,1024m"

Para 0,001% das solicitações, nginx mostra erro:

[error] 5331#5331: *7392847 upstream prematurely closed connection while reading response header from upstream, client: xx.xx.xx.xx, server: _, request: "GET /home HTTP/1.1", upstream: "http://127.0.0.1:8391/index.php?q=/home", host: "xxx", referrer: "xxx"

Jogar com proxy_buffers não ajudou.

    
por Oleksandr Strikha 14.01.2016 / 10:46

1 resposta

0

Tivemos esse mesmo problema, usando o Nginx para SSL e HTTP2, o Varnish para armazenamento em cache e o Apache para a veiculação da Web real.

Percebi que isso estava acontecendo apenas em solicitações que definimos para ignorar o verniz. Por alguma razão, anos atrás, usamos o return (pipe) em nosso arquivo VCL para eles. Eu mudei de retorno (pipe) para retornar (passar) e, voilà, problema resolvido.

Obviamente, você precisará olhar para o seu VCL e certificar-se de que o retorno (pass) funciona para o seu cenário, mas na maioria dos lugares provavelmente será a resposta.

    
por 13.09.2016 / 19:56

Tags