我的 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]