
Ich habe zwei Ports auf meinen Backend-Servern geöffnet, einen für HTTPS-Anfragen und einen für WebSocket-Anfragen. Die WebSockets verwenden HTTP, nicht HTTPS. Ich möchte, dass meine Haproxy-Instanz eine HTTP-301-Umleitung an eine Client-Anfrage sendet, die den Client direkt an einen Backend-Server umleitet. Nach der Umleitung sollte der Client direkt mit dem Backend-Server kommunizieren, unabhängig davon, ob es sich um eine WebSocket- oder eine HTTPS-Verbindung handelt. Unten ist meine Konfiguration. Sie funktioniert in dem Sinne, dass sie den Datenverkehr entsprechend umleitet, aber sie leitet nur an den ersten Server um, nie an den zweiten. Warum verwendet sie nicht Round Robin, um beide Server zu erreichen?
defaults
mode http
timeout connect 5000ms
timeout client 3000ms
timeout server 3000ms
timeout tunnel 0
frontend server-frontend
bind LB_IP:443
http-request redirect code 301 prefix https
default_backend server-backend
backend server-backend
balance roundrobin
server s1 SERVER1_IP:8443
server s2 SERVER2_IP:8443
frontend websocket-frontend
bind LB_IP:80
http-request redirect code 301 prefix http
default_backend websocket-backend
backend websocket-backend
balance roundrobin
server ws1 SERVER1_IP:8080
server ws2 SERVER2_IP:8080