On Tue, Oct 10, 2017 at 11:25 PM, Ruben <rdoc...@gmail.com> wrote: > I have some stateful chat servers (SockJS) running in docker swarm mode. > When doing dig chat I get an unordered randomized list of servers for > example: > > (every time the order is different) > 10.0.0.12 > 10.0.0.10 > 10.0.0.11 > > The chat is accessed by a chatName url parameter. Now I want to be able to > run a chat-load-balancer service in docker with multiple replicas using the > haproxy image. > > The problem is that docker always resolves to a randomized list when doing > dig chat. > > I want to map the chatName param from the url to a fixed server which > always have the same ip from the list of ips of dig chat. So the mapping of > the url_param should not be based on the position of the server in the > list, but solely on the ip of the server. > > So for example ?chatName=fun should always route to ip 10.0.0.12, no > matter what. > > My current haproxy.cfg is: > > defaults > mode http > timeout client 5s > timeout connect 5s > timeout server 5s > > frontend frontend_chat > bind :80 > mode http > timeout client 120s > option forwardfor > option http-server-close > option http-pretend-keepalive > default_backend backend_chat > > backend backend_chat > balance url_param chatName > timeout server 120s > server chat chat:80 > > At the moment it seems that only the Commercial Subscribtion of Nginx can > handle this kind of cases using the sticky route $variable ...; directive > in the upstream module. >
Maybe try: http-request set-header Host 10.0.0.12 if { query -m beg -i chatName=fun }