Hi list, I have got a complex "routing" problem and I am sure there is a solution with haproxy but the ring doesn't bell. The problem in this case is that all users of a customer have to work on the same application server (because of the data broadcast feature of the java application framework servoy). The login sequence looks like follows:
1. The user connects via https to the Java application and logs in. 2. The Java application gets downloaded to the client. 3. The Java application starts at the client side and connects via TCP to a dedicated port. To create a HA setup we tried to add some "backup" servers to every backend but we weren't able to find any working solution for those TCP listeners. Here is what the configuration looks like: frontend https-in log global bind *:80 bind *:443 ssl crt /etc/haproxy/test.pem reqadd X-Forwarded-Proto:\ https redirect scheme https if !{ ssl_fc } acl is_service url_reg /(xxxxxxxxxxxxxxxxxxxx.*/xxxxxxxxxxxxx) use_backend jnlp-%[url,map_reg(/etc/haproxy/url_reg.map,none)] if is_service use_backend %[url,map_reg(/etc/haproxy/url_reg.map,none)] default_backend none backend none log global http-request deny backend app01 reqrep ^([^\ ]*\ \/)app01[\/]?(.*) \1\2 reqrep ^xxxxxxxxxxxxxxxxxxxxxxxxxx \1\4 server app01 xxxxxx-app01-prod:8080 check server app02 xxxxxx-app02-prod:8080 check backup server app03 xxxxxx-app03-prod:8080 check backup backend jnlp-app01 acl intern src xxx.xxx.xxx.xxx reqrep ^([xxxxxxxxxxxxxxxxxxx\2 if !intern reqrep ^([xxxxxxxxxxxxxxxxxxxjnlp\2 if intern rsprep ^Content-Type:\ .*$ Content-Type:\ application/x-java-jnlp-file server jnlp-app01 xxxxxx-app01-prod:8080 check server jnlp-app02 xxxxxx-app02-prod:8080 check backup server jnlp-app03 xxxxxx-app03-prod:8080 check backup backend app02 reqrep ^([^\ ]*\ \/)app02[\/]?(.*) \1\2 reqrep ^xxxxxxxxxxxxxxxxxxxxxxxxx) \1\4 server app02 xxxxxx-app02-prod:8080 check server app01 xxxxxx-app01-prod:8080 check backup server app03 xxxxxx-app03-prod:8080 check backup backend jnlp-app02 acl intern src xxxxxxxxxx reqrep ^xxxxxxxxxx\2 if !intern reqrep ^xxxxxxxxxxxxxxxxxxxxxxx2 if intern rsprep ^Content-Type:\ .*$ Content-Type:\ application/x-java-jnlp-file server jnlp-app02 xxxxxx-app02-prod:8080 check server jnlp-app01 xxxxxx-app01-prod:8080 check backup server jnlp-app03 xxxxxx-app03-prod:8080 check backup [...] defaults log global mode tcp option tcplog timeout connect 10000 timeout client 150000 timeout server 150000 listen tcp-inout-app01 bind *:1091 server tcp-app01 xxxxxx-app01-prod:1091 check server tcp-app02 xxxxxx-app02-prod:1092 check backup server tcp-app03 xxxxxx-app03-prod:1093 check backup listen tcp-inout-app02 bind *:1092 server tcp-app02 xxxxxx-app02-prod:1092 check server tcp-app01 xxxxxx-app01-prod:1091 check backup server tcp-app03 xxxxxx-app03-prod:1093 check backup [...] So the problem is - after eg. app01 crashed all users get disconnected and after those users relogin the will connect to app02 and this application server will tell the java application to connect to port 1092. We tried to use "on-marked-up shutdown-backup-sessions" but as app02 is no backup on listener 1092 this does not make any sense. Anyone with a ringing bell? All the best, Florian