<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" class="elementToProof">
Couldn't a HEAD request solve this? Then nginx wouldn't bother with the body at all, right?</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" class="elementToProof">
This is what we do with our health checks. For example:</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" class="elementToProof ContentPasted0">
backend someBackend {
<div class="ContentPasted0">    .host = "[redacted]";</div>
<div class="ContentPasted0">    .port = "80";</div>
<div class="ContentPasted0">    .probe = {</div>
<div class="ContentPasted0">        .interval = 9s;</div>
<div class="ContentPasted0">        .request =</div>
<div class="ContentPasted0">            "HEAD /healthcheck HTTP/1.1"</div>
<div class="ContentPasted0">            "Host: [redacted]"</div>
<div class="ContentPasted0">            "User-Agent: varnish-health-probe"</div>
<div class="ContentPasted0">            "Connection: Close"</div>
<div class="ContentPasted0">            "Accept: */*";</div>
<div class="ContentPasted0">    }</div>
}<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> varnish-misc <varnish-misc-bounces+batanun=hotmail.com@varnish-cache.org> on behalf of George <izghitu@gmail.com><br>
<b>Sent:</b> Monday, April 17, 2023 10:21 AM<br>
<b>To:</b> varnish-misc@varnish-cache.org <varnish-misc@varnish-cache.org><br>
<b>Subject:</b> Strange Broken Pipe error from Varnish health checks</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div>Hi,</div>
<div><br>
</div>
<div>I have a Varnish/nginx cluster running with varnish-7.1.2-1.el7.x86_64 on CentOS 7.</div>
<div><br>
</div>
<div>The issue I am having comes from the varnish health checks. I am getting a "broken pipe" error in the nginx error log at random times like below:</div>
<div>Apr 10 17:32:46 VARNISH-MASTER nginx_varnish_error: 2023/04/10 17:32:46 [info] 17808#17808: *67626636 writev() failed (32: Broken pipe), client: unix:, server: _, request: "GET /varnish_check HTTP/1.1", host: "0.0.0.0"</div>
<div><br>
</div>
<div>The strange thing is that this error appears only when Varnish performs the health checks. I have other scripts doing it(nagios, curl, wget, AWS ELB) but those do not show any errors. In addition to this Varnish and nginx where the health checks occur
 are on the same server and it makes no difference if I use a TCP connection or socket based one.</div>
<div><br>
</div>
<div>Below are the varnish vcl and nginx locations for the health checks:</div>
<div>backend nginx_varnish {<br>
                   .path = "/run/nginx/nginx.sock";<br>
                   .first_byte_timeout = 600s;<br>
                   .probe = health;<br>
        }</div>
<div><br>
</div>
<div>location = /varnish_check {<br>
                keepalive_timeout 305;<br>
                return 200 'Varnish Check';<br>
                access_log /var/log/nginx/varnish_check.log main;<br>
                error_log /var/log/nginx/varnish_check_errors.log debug;<br>
                error_log syslog:server=unix:/run/nginx_log.in.sock,facility=local1,tag=nginx_varnish_error,nohostname info;<br>
        }</div>
<div><br>
</div>
<div>Are there any docs I can read about how exactly varnish performs the health checks and what internal processes are involved?</div>
<div>Did anyone happen to have similar issues? This is not causing any operational problems for the cluster but it is just something that I want to determine why it is happening because it just should not be happening.</div>
<div><br>
</div>
<div>Please help</div>
<div>THanks in advance.<br>
</div>
<div><br>
</div>
</div>
</div>
</body>
</html>