Eu segui inúmeras referências on-line, o que me diz que eu deveria ser capaz de criar um front-end como:
frontend http_https
bind 1.2.3.4:443 ssl crt /etc/haproxy/tls/mycert.pem
bind 1.2.3.4:80
mode http
option httplog
option forwardfor
option http-server-close
redirect scheme https code 301 if !{ ssl_fc }
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Request-Start t=%Ts%ms
http-response set-header Strict-Transport-Security max-age=15768000
use_backend %[req.hdr(host),lower,map(/etc/haproxy/domains-to-backends.map)]
Quando obtenho um tcpdump
no meu servidor de back-end, vejo todos os cabeçalhos add-header
e set-header
, mas não vejo nenhum cabeçalho X-Forwarded-For
.
Se eu adicionar algo como:
http-request add-header X-Client-IP %[src]
Eu vejo esse cabeçalho sendo transmitido com o IP do cliente correto.
Alguém pode oferecer alguma ideia de por que isso pode não estar funcionando? Ou qualquer motivo, eu não deveria usar apenas http-request set-header X-Forwarded-For %[src]
em vez de option forwardfor
?
Uma seção de back-end de amostra:
backend bk_foo
balance roundrobin
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http
option httpchk
server foo.example.com 10.1.2.3:8080 check