No meu balanceador de carga HAProxy, tenho os seguintes fragmentos de configuração:
defaults
mode http
log global
option httplog clf
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
frontend main_http *:80
option forwardfor except 127.0.0.1
option httpclose
default_backend backend_http
backend backend_http
balance roundrobin
option httpchk
server node1 10.0.0.64:80 check port 80
server node2 10.0.0.65:80 check port 80
server node3 10.0.0.66:80 check port 80
Nos nós (Tomcat), estou registrando solicitações neste formato (combinadas com x-forwarded-for no primeiro campo e o REMOTE_ADDR real colado no final):
pattern='%{X-Forwarded-For}i - %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %a'
Isso parece funcionar bem para a maioria das solicitações, mas em alguns casos, presumo que os clientes estão por trás de proxies, estou vendo solicitações em que o primeiro campo contém esses valores (cada linha representa uma solicitação real, eu desfiei os IPs reais para privacidade):
10.83.103.44, 10.83.103.44
10.83.198.52, 10.83.198.52
10.53.109.36, 10.53.109.36
unknown, unknown
192.168.1.43, 127.0.0.1
192.168.11.189, 127.0.0.1
10.1.6.3, 216.x.y.194, 10.37.52.202
192.168.50.250, 38.x.y.5, 10.37.31.201
De acordo com os documentos do HAproxy, o último X-Forwarded-For deve ser o correto que ele anexou, mas este não parece ser o caso. Meu aplicativo usa o IP do cliente para uma pesquisa geográfica, portanto, isso não é apenas um problema de registro, ele está estragando tudo.
O que eu gostaria de fazer é: em vez de ter o HAproxy anexando o IP do cliente ao cabeçalho existente do X-Forwarded-For, simplesmente sobrescreva-o. Portanto, se ele receber X-Forwarded-For: 10.1.2.3
do endereço IP 98.76.54.32, o que ele enviaria para os clientes é apenas X-Forwarded-For: 98.76.54.32
. Há alguma maneira de fazer isso? Eu gostaria de saber por que esse lixo óbvio está chegando aos nós - unknown, unknown
é claramente informação de lixo eletrônico - mas vou me contentar com uma solução alternativa se existir.
Obrigado antecipadamente.