У меня есть Nginx (1.9.9) перед Varnish (4.1.0) на том же сервере.
//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"
Для 0,001% запросов nginx показывает ошибку:
[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"
Игра с proxy_buffers не помогла.
У нас была такая же проблема, когда мы использовали Nginx для SSL и HTTP2, Varnish для кеширования и Apache для фактического веб-обслуживания.
Я заметил, что это происходило только с запросами, которые мы установили для обхода Varnish. По какой-то причине много лет назад мы использовали для этого return (pipe) в нашем файле VCL. Я изменил его с return (pipe) на return (pass), и, вуаля, проблема решена.
Очевидно, вам нужно взглянуть на свой VCL и убедиться, что return (pass) работает для вашего сценария, но в большинстве случаев он, вероятно, будет ответом.