<div dir="ltr"><div style="padding:0px 0px 0px 2px"><div style="color:rgb(0,0,0);font-family:monospace;font-size:10pt"><p style="margin:0px">Hello</p><p style="margin:0px"><br></p><p style="margin:0px">I have an issue with <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> closing prematurely connections when reload is performed.</p><p style="margin:0px"><br></p><p style="margin:0px">I have some <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> servers configured to proxy_pass requests to an upstream group. This group itself is composed of several servers which are <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> themselves, and is configured to use <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">keepalive</span> connections.</p><p style="margin:0px">When I trigger a reload (-s reload) on an <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> of one of the servers which is target of the upstream, I see in error logs of all servers in front that connection was reset by the <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> which was reloaded.</p><p style="margin:0px"><br></p><p style="margin:0px">Here configuration of upstream group (IPs are hidden replaced by IP_X):</p><p style="margin:0px">--- BEGIN ---</p><p style="margin:0px">upstream data_api {</p><p style="margin:0px">        random;</p><p style="margin:0px"><br></p><p style="margin:0px">       server IP_1:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_2:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_3:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_4:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_5:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_6:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_7:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_8:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_9:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px">    server IP_10:80 max_fails=3 fail_timeout=30s;</p><p style="margin:0px"><br></p><p style="margin:0px"> <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">keepalive</span> 20;</p><p style="margin:0px">}</p><p style="margin:0px">--- END ---</p><p style="margin:0px"><br></p><p style="margin:0px">Here configuration of the location using this upstream:</p><p style="margin:0px">--- BEGIN ---</p><p style="margin:0px">location / {</p><p style="margin:0px">  proxy_pass <a href="http://data_api">http://data_api</a>;</p><p style="margin:0px"><br></p><p style="margin:0px">       proxy_http_version 1.1;</p><p style="margin:0px"> proxy_set_header Connection "";</p><p style="margin:0px"><br></p><p style="margin:0px">     proxy_set_header Host $host;</p><p style="margin:0px">    proxy_set_header X-Real-IP $real_ip;</p><p style="margin:0px">    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</p><p style="margin:0px"><br></p><p style="margin:0px">  proxy_connect_timeout 2s;</p><p style="margin:0px">       proxy_send_timeout 6s;</p><p style="margin:0px">  proxy_read_timeout 10s;</p><p style="margin:0px"><br></p><p style="margin:0px">       proxy_next_upstream error timeout <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">http</span>_502 <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">http</span>_504;</p><p style="margin:0px">}</p><p style="margin:0px">--- END ---</p><p style="margin:0px"><br></p><p style="margin:0px">And here the kind of error messages I get when I reload <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> of "IP_1":</p><p style="margin:0px">--- BEGIN ---</p><p style="margin:0px">2024/03/25 11:24:25 [error] 3758170#0: *1795895162 <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">recv</span>() failed (104: Connection reset by peer) while reading response header from upstream, client: CLIENT_IP_HIDDEN, server: SERVER_HIDDEN, request: "POST /REQUEST_LOCATION_HIDDEN HTTP/2.0", upstream: "<a href="http://IP_1:80/REQUEST_LOCATION_HIDDEN">http://IP_1:80/REQUEST_LOCATION_HIDDEN</a>", host: "HOST_HIDDEN", referrer: "REFERRER_HIDDEN"</p><p style="margin:0px">--- END ---</p><p style="margin:0px"><br></p><p style="margin:0px">I thought -s reload was doing graceful shutdown of connections. Is it due to the fact that <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> can not handle that when using <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">keepalive</span> connections? Is it a bug?</p><p style="margin:0px">I am using <span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">nginx</span> 1.24.0 everywhere, no particular </p><p style="margin:0px"><br></p><p style="margin:0px">Thank you for any help.</p><p style="margin:0px"><br></p><p style="margin:0px"><span style="text-decoration-line:underline;text-decoration-style:wavy;text-decoration-color:rgb(255,128,64)">Sébastien</span></p><p style="margin:0px"></p></div></div></div>