Appears to be "randomly" switching between the acl matched backend and the default backend

Posted by Xoor on Server Fault See other posts from Server Fault or by Xoor
Published on 2012-11-02T20:30:57Z Indexed on 2012/11/02 23:04 UTC
Read the original article Hit count: 367

I have HAProxy acting as a proxy in front of:

  • An NGinx instance
  • An in-house load balancer in front of multiple dynamic services exposed with socket.io (websockets)

My problem is that from time to time my connections are proxied correctly to my socket.io cluster, and then randomly it fallsback to routing to NGinx which obviously is annoying and meaningless since NGinx isn't mean't to handle the request.

This happens when requesting for URLs of the format :

http://mydomain.com/backends/*

There's an ACL in the HAProxy config to match the '/backends/*' path.

Here's a simplified version of my HAProxy config (removed extra unrelated entries and changed names):

global
    daemon
    maxconn 4096
    user haproxy
    group haproxy
    nbproc 4 

defaults
    mode http
    timeout server 86400000
    timeout connect 5000
    log global


#this frontend interface receives the incoming http requests
frontend http-in
    mode http

    #process all requests made on port 80
    bind *:80

    #set a large timeout for websockets
    timeout client 86400000

    # Default Backend
    default_backend www_backend

    # Loadfire (socket cluster)
    acl is_loadfire_backends path_beg /backends
    use_backend loadfire_backend if is_loadfire_backends


# NGinx backend
backend www_backend
    server www_nginx localhost:12346 maxconn 1024


# Loadfire backend
backend loadfire_backend
    option forwardfor # This sets X-Forwarded-For
    option httpclose
    server loadfire localhost:7101 maxconn 2048

It's really quite confusing for me why the behaviour appears to be "random", since being hard to reproduce it's hard to debug.

I appreciate any insight on this.

© Server Fault or respective owner

Related posts about proxy

Related posts about load-balancing