Serve errorfile in default_backend when mode is tcp


I switched from nginx to HAProxy for load balancing because HAProxy does support health-checks (yeah!).

Current config:

    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy

    log     global
    mode    http
    option  httplog
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    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

frontend https-local
    bind :443
    option tcplog
    log global
    mode tcp
    use_backend local-default-http2
    default_backend bknd-down

backend local-default-http2
    mode tcp
    balance roundrobin
    option tcplog
    option ssl-hello-chk
    option httpchk HEAD /index.html HTTP/2.0\r\nHost:\\r\nUser-Agent:\ HAPROXY-CHECK
    server nginx_http2 check check-ssl inter 1000 verify none

backend bknd-down
    # server errorfile?

HAProxy checks every second if the server is reachable (I replaced the domain with When the server is down (or more the app isn’t running so /index.html can’t be requests) it just see a ‘ERR_CONNECTION_CLOSED’ error in chrome.

I thought I could simply add a default_backend to the frontend which is used when all the other servers available (it’s only one in my example) are down. But that’s not working.

How can I achieve that? When the local-default-http2 backend has no server available show an errorfile.

Thank you very much! :slight_smile: