Eu resolvi esse problema. Pode ser que não tenha sido um problema desde o começo. Eu fiz pesquisa no google quando enfrentei esse problema, e vi que
option forwardfor
linha para usar no arquivo haproxy.cfg e também outras opções. Eu tentei essas opções incluindo recompilar o haproxy ... Mas o problema real relacionado ao aprendizado de IPs de clientes reais em servidores web não é proveniente de HAproxy, é sobre ler cabeçalhos por scripts de servidor, no nosso caso essa linguagem de script é PHP.
Eu tento aprender os IPs do cliente por esses comandos
echo 'Client IP: '.$_SERVER["REMOTE_ADDR"];
echo 'Client IP: '.$_SERVER["HTTP_CLIENT_IP"];
e esses comandos exibem o IP do loadbalancer. Isso está correto, mas não é isso que eu esperava. Apesar da opção forwardfor desses comandos, me deu o IP do loadbalancer
Ao usar a opção forwardfor, fazemos ativar o HAproxy para inserir o cabeçalho x-forwarded-for nos pedidos do cliente enviados para nossos servidores da web. HAproxy colocou esse campo no cabeçalho, mas eu ignorei isso. Hoje percebi que este é um campo de cabeçalho e tenho que ler este cabeçalho como este
echo 'Client IP: '.$_SERVER["HTTP_X_FORWARDED_FOR"];
Com este comando, obtive o endereço IP do cliente, não o endereço IP do loadbalancer.
Mas minha oferta é para obter os dados do cabeçalho para investigar que a outra informação é a função getallheaders () para PHP.
//from php.net http://php.net/manual/en/function.getallheaders.php
foreach (getallheaders() as $name => $value) {
echo "$name: $value<br>\n";
}
O fim de todo o meu último arquivo haproxy.cfg é como abaixo.
global
maxconn 100000
uid 99
gid 99
daemon
defaults
option forwardfor except 127.0.0.1
mode http
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen myWeb 0.0.0.0:80
mode http
balance source
option forwardfor
option http-server-close
stats enable
stats refresh 10s
stats hide-version
stats scope .
stats uri /lb?stats
stats realm LB2\ Statistics
stats auth admin:passwd
server S1 192.168.1.117:80 check inter 2000 fall 3
server S2 192.168.1.116:80 check inter 2000 fall 3
server S3 192.168.1.118:80 check inter 2000 fall 3
No entanto, eu tenho muitas coisas que faltam sobre o HAproxy, como o que é o significado uid ou gid.