Haproxy Real IP + Cloudflare

时间:2013-04-01 02:45:15

标签: haproxy cloudflare

我似乎无法完成这件事。我仍然在我的日志中看到cloudflare IP。目前,我有一个负载均衡器,它位于Cloudflare之后。

目前,这里是与forwardfor相关的块:

    option          forwardfor except 127.0.0.1
option          forwardfor except 204.93.240.0/24
option          forwardfor except 204.93.177.0/24
option          forwardfor except 199.27.128.0/21
option          forwardfor except 173.245.48.0/20
option          forwardfor except 103.22.200.0/22
option          forwardfor except 141.101.64.0/18
option          forwardfor except 108.162.192.0/18
    option          forwardfor header X-Real-IP
    reqadd          X-Forwarded-Proto:\ http

有没有人知道正确的配置从Cloudflare获取真正的IP?或者也许相当于nginx的set_real_ip_from cloudflareIP和/或real_ip_header CF-Connecting-IP到haproxy?感谢。

3 个答案:

答案 0 :(得分:2)

你实际上应该什么都不做。问题是你试图插入一个forwardfor,除了难以管理的cloudflare IP列表,但你的所有流量都来自cloudflare。

只需取出任何forwardfor选项,cloudflare标题将通过haproxy持续存在。

如果你必须做类似于你正在尝试的事情,请确保添加“选项httpclose”以确保它始终如此。

答案 1 :(得分:2)

你在寻找的是:

http-request add-header X_FORWARDED_FOR %[req.hdr(CF-Connecting-IP)]

这将添加正确的cloudflare源IP。 如果您什么都不做,那么您最终会得到src地址和cloudflare地址的两个标头。

答案 2 :(得分:2)

您可以这样做:

HaProxy配置:

acl from_cf    src -f /path/to/cloudflare_ips.lst
acl cf_ip_hdr  req.hdr(CF-Connecting-IP) -m found

http-request set-header X-Forwarded-For %[req.hdr(CF-Connecting-IP)] if from_cf cf_ip_hdr
  • 进行测试时要小心,由于使用KeepAlive,您可能每次都需要使用新的浏览器/标签。