We are trying to deploy HAProxy into our environment. We have a script that does some 600k api calls during approximately 24 hours. During that time, when haproxy is in place, there are a handful (8-12) of responses that come back as 502 with SH--. We've tested this against Ubuntu's default 2.8 version of HAProxy, along with 3.0.3 and most recently 3.1-dev5-8427c5b. It is the same in each version. The logs don't seem to tell us much. The backend server doesn't show any issues, and indeed, when HAProxy is not in place, there are no errors whatsoever.
I'm afraid that at the moment, I don't know how to reproduce this beyond what we are doing in our environment, but that's not something we can share with others. That said, if you have any guidance on how I can discover what is going on, I'd be more than happy to dig in further. I turned the logging to debug, but it doesn't seem to show me anything more than what info was giving us. Our config file looks like the following: global log stdout len 65535 local0 debug user haproxy group haproxy daemon stats timeout 30 # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private ssl-default-bind-ciphers (list) ssl-default-bind-ciphersuites (list) ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets tune.bufsize 8388608 tune.maxrewrite 1024 defaults log global mode http option dontlognull log-format '{"host":"%H","ident":"haproxy","pid":%pid,"timestamp":"%Tl","haproxy":{"connections":{"active":%ac,"frontend":%fc,"backend":%bc,"server":%sc},"queue":{"backend":%bq,"server":%sq},"timing_ms":{"time_to_end_of_headers":%TR,"client_request_send_time":%Tq,"queue_wait_time":%Tw,"server_wait_time":%Tc,"server_response_send_time":%Tr,"response_time":%Td,"session_duration":%Tt},"termination_state":"%tsc","retries":%rc,"network":{"client_ip":"%ci","client_port":%cp,"frontend_ip":"%fi","frontend_port":%fp},"ssl":{"version":"%sslv","ciphers":"%sslc"},"request":{"method":"%HM","uri":"%[front4.req.uri,json(utf8s)]","protocol":"%HV","header":{"host":"%[front4.req.hdr(0),json(utf8s)]","xforwardfor":"%[front4.req.hdr(1),json(utf8s)]","referer":"%[front4.req.hdr(2),json(utf8s)]"}},"name":{"frontend":"%ft","backend":"%b","server":"%s"},"response":{"status_code":%ST,"header":{"xrequestid":"%[front4.res.hdr(0),json(utf8s)]"}},"bytes":{"uploaded":%U,"read":%B}}}' timeout connect 86400s timeout client 86400s timeout server 86400s errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http #listen prometheus #this doesn't work in 3.1 # bind *:9100 # mode http # http-request use-service prometheus-exporter if { path /metrics } # no log frontend www http-request front4 req.hdr(Host) len 1000 http-request front4 req.hdr(Referer) len 1000 bind *:80 bind *:443 ssl crt /etc/ssl/private/star.domain.com.pem crt /etc/ssl/private/star.domain2.com.pem crt /etc/ssl/private/star.domain3.com.pem alpn h2,http/1.1 option forwardfor # stats stuff for admin path for web interface stats enable stats uri /admin stats realm HAProxy\ Statistics stats auth admin:"$AUTH" stats admin if TRUE stats show-node #### data frontends #### acl front1_acl hdr(host) -i front1.domain.com use_backend front1 if front1_acl acl front2_acl hdr(host) -i front2.domain.com use_backend front2 if front2_acl acl front3_pgst_acl hdr(host) -i front3.domain.com use_backend front3 if front3_pgst_acl acl front3_redx_acl hdr(host) -i front3.domain2.com use_backend front3 if front3_redx_acl acl front3_theredx_acl hdr(host) -i front3.domain3.com use_backend front3 if front3_theredx_acl acl front4_acl hdr(host) -i front4.domain.com use_backend front4 if front4_acl acl front5_acl hdr(host) -i front5.domain.com use_backend front5 if front5_acl acl front6_acl hdr(host) -i front6.domain.com use_backend front6 if front6_acl acl front7_acl hdr(host) -i front7.domain.com use_backend front7 if front7_acl acl front8_acl hdr(host) -i front8.domain.com use_backend front8 if front8_acl acl front9_acl hdr(host) -i front9.domain.com use_backend front9 if front9_acl acl front10_acl hdr(host) -i front10.domain.com use_backend front10 if front10_acl acl front11_acl hdr(host) -i front11.domain.com use_backend front11 if front11_acl acl front12_acl hdr(host) -i front12.domain.com use_backend front12 if front12_acl acl front12_redx_com_acl hdr(host) -i front12.domain2.com use_backend front3 if front12_redx_com_acl acl front12_theredx_com_acl hdr(host) -i front12.domain3.com use_backend front3 if front12_theredx_com_acl ##### data backends##### backend front1 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front1.domain.com http-check expect status 200 server pdafront12 192.168.69.102:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front2 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front2.domain.com http-check expect status 200 server pdafront22 192.168.5.244:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front3 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front3.domain.com http-check expect status 200 server pdafront32 192.168.6.3:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front4 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front4.domain.com http-check expect status 200 server pdafront42 192.168.5.244:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front5 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front5.domain.com http-check expect status 200 server pdafront52 192.168.5.244:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front6 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front6.domain.com http-check expect status 200 server pdafront62 192.168.69.4:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front7 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front7.domain.com http-check expect status 200 server pdafront72 192.168.5.244:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front8 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front8.domain.com http-check expect status 200 server pdafront82 192.168.5.244:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front9 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front9.domain.com http-check expect status 200 server pdafront92 192.168.5.244:443 ssl verify none check fall 2 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front10 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front10.domain.com http-check expect status 200 server pdafront102 192.168.6.4:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front11 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front11.domain.com http-check expect status 200 server pdafront112 192.168.5.244:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 backend front12 option httpchk http-check send meth HEAD uri /srvstatus ver HTTP/1.1 hdr Host front12.domain.com http-check expect status 200 server pdafront122 192.168.5.244:443 ssl verify none check fall 1 rise 2 inter 5s fastinter 1s downinter 1m alpn h2,http/1.1 Thanks in advance, BJ