Temos o HAProxy instalado na frente do Apache. A configuração funciona, mas o endereço IP do cliente não é encaminhado, apesar da regra "forwardfor".
Eu já investiguei respostas sobre falhas de servidor como esta, por exemplo , haproxy e encaminhando o endereço IP do cliente para os servidores, mas não consegui resolver o problema até agora.
Esta é a configuração:
frontend apache-http
bind 192.168.56.150:80
mode http
option http-server-close
option forwardfor header X-Real-IP
reqadd X-Forwarded-Proto:\ http
default_backend apache-http
stats enable
#stats hide-version
backend apache-http
# redirect scheme https if !{ ssl_fc }
balance roundrobin
cookie SERVERID insert indirect nocache
server www-1 10.0.0.120:80 cookie S1 check
server www-2 10.0.0.130:80 cookie S2 check
As variáveis do PHP Server retornam as informações do HAProxy:
$_SERVER['REMOTE_ADDR'] returns 10.0.0.120
$_SERVER['HTTP_X_FORWARDED_FOR'] returns nothing
O log do Apache também retorna ---
configuração:
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Estou faltando alguma coisa na configuração do HAProxy?
O problema está em uma incompatibilidade de configuração entre o HAProxy e o Apache.
Você disse ao HAProxy para enviar o IP real do cliente em um cabeçalho chamado
X-Real-IP
:No Apache, você está procurando por um cabeçalho chamado
X-Forwarded-For
:Você tem duas opções para corrigir isso.
Deixe o HAProxy adicionar um cabeçalho com o nome padrão, alterando
para
Altere o Apache e seu código PHP para procurar o cabeçalho correto :