为什么 HAProxy 没有添加“X-Forwarded-For”?

为什么 HAProxy 没有添加“X-Forwarded-For”?

我在网上查阅了大量参考资料,它们告诉我我应该能够设置一个像这样的前端:

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)]

tcpdump当我在后端服务器上进行操作时,我看到了所有的add-headerset-header标题,但没有看到任何X-Forwarded-For标题。

如果我添加类似以下内容:

  http-request add-header X-Client-IP %[src]

我确实看到了传递的标头,带有正确的客户端 IP。

有人能解释一下为什么这个方法不起作用吗?或者有什么理由我不应该直接使用http-request set-header X-Forwarded-For %[src]而不是option forwardfor


后端部分示例:

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

答案1

编辑:您应该将其放在option forwardfor后端部分。而不是前端部分。

我认为 HAProxy 配置没有任何问题。我已经使用 forwardfor 选项进行了许多配置,没有任何问题。HAProxy 和后端服务器之间是否有设备可能会删除某些标头?此外,我建议使用专注于此标头的简单设置进行测试,以确保其他配置不会导致问题。

相关内容