Hi,
Le 15/03/2012 08:39, wsq003 a écrit :
Thanks, Carlo. It works.
But can it be simpler? such as:
frontend http
bind :80
mode http
default_backend pool
backend pool
server s01 2.3.4.1:80
server s02 2.3.4.2:80
server s03 2.3.4.3:80
use_server s01 if { src 217.192.7.0/24 }
If you're in http mode, you may use some tricks to emulate this (Note
that I've never tested it in production).
First, use "cookie" keyword without any actions (no prefix, insert or
rewrite option) :
cookie LB
Add cookie values on each server :
server s01 2.3.4.1:80 cookie s01
server s02 2.3.4.2:80 cookie s02
server s03 2.3.4.3:80 cookie s03
Then enumerate the acls you want to reach a specific server :
acl s01 src 217.192.7.0/24
acl s02 ...
Ask haproxy to add a fake cookie depending on the acl matching :
reqadd Cookie:\ LB=s01 if s01
And maybe you want to force the persistence for such conditions :
force-persist if s01 || s02 ...
To sum up, this gives :
backend pool
mode http
# use option httpclose or option http-server-close
...
cookie LB
server s01 2.3.4.1:80 cookie s01
server s02 2.3.4.2:80 cookie s02
server s03 2.3.4.3:80 cookie s03
acl s01 src 217.192.7.0/24
acl s02 ...
reqadd Cookie:\ LB=s01 if s01
force-persist if s01 || s02 ...
Consider this experimental unless someone confirms he already used this
in production ;-)
--
Cyril Bonté