Search code examples
portconfighaproxy

How to run stats in HAProxy 1.6.4 on same port as frontend?


I'm using HAProxy 1.6.4 and want to enable the stats. (/haproxy?stats)

Here is my cfg:

global
   log 127.0.0.1 local2
   daemon
   maxconn 256

defaults
   log global
   timeout connect  5000
   timeout client  10000
   timeout server  10000

frontend http-in
   bind *:8080
   default_backend testb

backend testb
   balance roundrobin
   server s1 123.456.789.0:443 maxconn 32
   server s2 123.456.789.1:443 maxconn 32

listen statistics
   bind *:8080
   mode http
   stats enable

If I run statistics on other port than 8080 it works, but how can I run it on the same port as my frontend (8080), which is running in the default mode tcp?


Solution

  • You can do it by redirecting to your self and using access list like this:

    global
       log 127.0.0.1 local2
       daemon
       maxconn 256
    
    defaults
       log global
       timeout connect  5000
       timeout client  10000
       timeout server  10000
    
    listen stats :1936
       mode http
       stats enable
       stats hide-version
       stats realm Haproxy\ Statistics
       stats uri /
       stats auth myUser:myPassword
    
    frontend http-in
       bind *:8080
       acl is_www hdr_end(host) -i www.mysite.com
       acl is_stat hdr_end(host) -i stat.mysite.com  
    
       use_backend srv_www if is_www
       use_backend srv_stat if is_stat
    
    backend srv_www
       balance roundrobin
       server s1 123.456.789.0:443 maxconn 32
       server s2 123.456.789.1:443 maxconn 32
    
    backend srv_stat
       server Local 127.0.0.1:1936
    

    When going to your server with www, it takes you to the web server. But using stat, it redirects you from your input port 8080 to 1936 whee stat is running