HAProxy - 如何在 X-Client-IP 和 X-Forwarded-For 标头中附加客户端 IP?

HAProxy - 如何在 X-Client-IP 和 X-Forwarded-For 标头中附加客户端 IP?

我的 HAProxy 服务器有问题。我想在标头中转发客户端 IP。我几乎做到了,但有一个有趣的案例,我无法弄清楚。我需要在标头中的两个地方写入客户端 IP,即 X-CLIENT-IP 和 X-FORWARDED-FOR 标签。

问题是:当我使用

option http-server-close
option forwardfor

在目标服务器上,我看到标头 X-FORWARDED-FOR=xxx.xxx.xxx.xxx(客户端 ip),但没有 x-client-ip 标头。

当我使用时:

option forwardfor header X-Client-IP
option http-server-close

在目标服务器上,我看到标头 X-CLIENT-IP=xxx.xxx.xxx(客户端 IP)但 X-FORWARDED-FOR=xxx.xxx.xxx.xxx(HAProxy ip)

我需要在目标标头上查看 X-CLIENT-IP 和 X-FORWARDED-FOR 中客户端 IP 的值。

我尝试混合配置,例如

 option forwardfor
 option forwardfor header X-Client-IP
 option http-server-close

没有效果。我也无法安装任何模块。目标是 IIS。

有任何想法吗? :(

答案1

您可以尝试设置自定义标题,如下所示:

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

或者,您甚至可以从 X-Forwarded-For 标头复制它,我认为语法如下:

http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])

答案2

如果您想同时使用两者,则需要在第二个中添加关键字http-request

# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]

答案3

上面建议的答案对 Kacpro 不起作用,因此只需要通过添加来读取值&[...],所以这应该可以正常工作:

http-request set-header X-Client-IP %[req.hdr_ip([X-Forwarded-For])]

答案4

这个对我来说最有效:

backend example
    mode http
    option forwardfor
    http-request set-header X-Forwarded-For %[src]

相关内容