Sto configurando un HAProxy di fronte a solo 2 server back-end, con una configurazione particolare: qualsiasi richiesta dovrebbe andare al server A; ma, se il server A restituisce un codice di errore 5xx, tutte le richieste devono essere inviate a un server di backup B. Quando A restituisce "attivo", tutte le richieste devono essere indirizzate ad A.
Sto provando questa configurazione:
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
Ma non funziona per due motivi:
- Tutte le richieste vengono instradate al server node_back (B), anche se node1 (A) è attivo.
- Sembra che nessun controllo http venga eseguito sul server A; o meglio, in syslog non vedo alcun errore riguardo al server A inattivo.
Se rimuovo la riga "opzione httpchk" e le due righe appena sotto di essa; e rimuovo anche "osservare layer7" nel server A; HAProxy funziona indirizzando tutte le richieste al nodo A. Ma, ovviamente, quando il server A restituisce un 500, HAProxy non passa a B. Quindi, presumo che il problema potrebbe essere nell'opzione configurazione httpchk.