Am două backend-uri (b1, b2) în spatele aceluiași frontend (f1) în HAProxy, rutare bazată pe numele gazdei. Pot stabili websocket atât la b1, cât și la b2 de pe laptop, totuși, dacă încerc să stabilesc websocket la b2 de la b1 (prin f1) primesc eroarea 1006 (anormalitate închisă - EOF neașteptat). Pingul b2 de la b1 reușește. Iată configurația mea:
frontend f1
bind 192.168.1.1:443 nume 192.168.1.1:443 ssl crt-list /var/etc/haproxy/ReverseProxyHTTP.crt_list
modul http
jurnal global
opțiunea httplog
opțiunea http-keep-alive
opțiune forwardfor
http-request set-header X-Forwarded-Proto http dacă !https
http-request set-header X-Forwarded-Proto https dacă https
timeout client 30000
acl b1 var(txn.txnhost) -m beg -i b1
acl b2 var(txn.txnhost) -m beg -i b2
acl hdr_connection_upgrade hdr(Conexiune) -i upgrade
acl hdr_upgrade_websocket hdr(Upgrade) -i websocket
use_backend b1ws if b1 hdr_connection_upgrade hdr_upgrade_websocket
use_backend b1 dacă b1
use_backend b2 dacă b2
backend b1ws
modul http
id 119
jurnal global
tip stick-table ip dimensiune 50k expiră 30m
stick pe src
sursa de echilibru
timeout connect 30000
server timeout 30000
reîncercări 3
server s1 192.168.1.2:443 id 101 ssl verifica niciun rezolutori globalresolvers
backend b1
modul http
id 117
jurnal global
tip stick-table ip dimensiune 50k expiră 30m
stick pe src
sursa de echilibru
timeout connect 30000
server timeout 30000
reîncercări 3
server s1 192.168.1.2:443 id 101 ssl verifica nici unul rezolutori globalresolvers alpn h2,http/1.1
backend b2
modul http
id 120
jurnal global
tip stick-table ip dimensiune 50k expiră 30m
stick pe src
sursa de echilibru
timeout connect 30000
server timeout 30000
reîncercări 3
tunelul timeout 3600s
server s2 192.168.1.3:443 id 101 ssl verifică niciun rezolutori globalresolvers
Notă: b1 și b1ws indică același server și port, deși b1 preferă http2 pentru grpc. Dacă este prezent antetul websocket, va fi folosit b1ws.