在启用 accept-proxy 的情况下,如何将远程服务器 ip 作为标头传递到 haproxy tcp 隧道中?

在启用 accept-proxy 的情况下,如何将远程服务器 ip 作为标头传递到 haproxy tcp 隧道中?

我需要一个 haproxy 的变量,它是实际的远程 ip,同时仍在使用accept-proxy,就像http-response set-header Upstream-Server %[req.real_ip].%[src]一样不是accept-proxy如果处于活动状态,则工作并从代理协议发送客户端ip 。

我有这样的设置:

  1. haproxy 负载均衡器
  2. haproxy ddos​​ 保护服务器
  3. nginx 代理 PHP Web 应用程序

1 接受公共 Internet HTTP/S 连接并mode tcp转发它们。2
这些accept-proxy连接,终止ssl crt,然后应用反机器人逻辑。3
是最终目的地和 Web 应用程序。

这是一个相当复杂的设置,因此配置中偶尔会出现一些小问题,由于移动部件的数量,这些问题很难诊断。我需要 nginx 知道 1 和 2 的 IP,这样它就可以将其发送到实际的 Web 应用程序进行调试。

答案1

非常愚钝,但确实有效。

tcp-request必须出现在任何 http 请求之前,以免引起警告。tcp-request connection是 中唯一不受 中的指令src改变的范围。因此,accept-proxybind

frontend http-in
        bind :443 ssl crt /etc/ssl/mycert accept-proxy
        option forwardfor

        tcp-request connection set-var(sess.last_server_ip) src
        http-request add-header X-Forwarding-Frontend %[var(sess.last_server_ip)]

这将添加标头X-Forwarding-Frontend,其中包含 haproxy 接收代理协议请求的服务器的值。必须以这种方式将其设置为变量,因为src当不作为 的参数时,在其他每个上下文中都有不同的值tcp-request connection

相关内容