I'm testing running HAProxy as a dedicated load balancer behind Apache 2.2, replacing our current configuration where we use Apache's load balancer. In our current, Apache only, set-up if all the backend (origin) servers are down Apache will serve a 503 service unavailable message. With HAProxy I get a 502 bad gateway response.
I'm using a simple reverse proxy rewrite rule in Apache
RewriteRule ^/(.*) http://127.0.0.1:8000/$1 [last,proxy]
In HAProxy I have the following (running in default tcp mode)
defaults log global option tcp-smart-accept timeout connect 7s timeout client 60s timeout queue 120s timeout server 60s listen my_server 127.0.0.1:8000 balance leastconn server backend1 127.0.0.1:8001 check observe layer4 maxconn 2 server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
Testing connecting directly to the load balancer when the backend servers are down:
[root@dev ~]# wget http://127.0.0.1:8000/ test.html --2012-05-28 11:45:28-- http://127.0.0.1:8000/ Connecting to 127.0.0.1:8000... connected. HTTP request sent, awaiting response... No data received.
So presumably this is down to the fact that HAProxy accepts the connection and then closes it.