从HAProxy发送PROXY协议头

我可能已经迷失在这个主题的大量文档,但我想configuration我的HAProxy进程发送PROXY协议标头,如http://www.haproxy.org/download/1.8/doc/ proxy-protocol.txt 。 这是因为我不得不将PROXY协议的支持写入到C ++服务器(为了能够访问客户端IP /端口),并且我想testing我的代码是否正确地处理了PROXY头文件的parsing。

这是我最小的configuration文件:

global maxconn 4096 defaults log global mode http retries 3 option redispatch maxconn 2000 timeout connect 5000 timeout client 50000 timeout server 50000 frontend TestServerTest bind 10.6.186.24:54781 mode tcp default_backend TestServernodes backend TestServernodes mode tcp # Note there is no 'check' after the below line unlike the others as we don't want to send the # healthcheck ("OPTIONS / HTTP/1.0"...) string to the TestServer as it doesn't understand it! server TestServer01 10.6.186.24:48080 

我发现当我启动HAProxy并连接到54781时,TestServer在48080接收到的第一个数据是从我的客户端发送的数据; 这不是在我发布的链接描述的PROXY头。

有人可以告诉我什么,我在我的configuration缺less阻止PROXY头被发送到我的后端服务器?

在发布HAProxy邮件列表([email protected])后,我得到了答案,我需要添加send-proxysend-proxy-v2到我的后端server定义。

我更新的configuration文件有以下行:

服务器TestServer01 10.6.186.24:48080 发送代理

…发送PROXY协议的版本1。

要发送版本2,请将其更改为

server TestServer01 10.6.186.24:48080 send-proxy-v2

根据链接的文档,完整的configuration需要configuration几个组件。

如果您的真实后端前有haproxy实例,则可能需要应用accept-proxy

当“accept-proxy”设置被传递给“bind”关键字时,监听套接受协议。 在这样的监听器上接受的连接的行为就像源协议中所宣传的一样。 日志logging,ACL,内容过滤,透明代理等都是如此。

这是你在答案中find的部分,后端服务器需要使用send-proxy进行configuration:

如果“服务器”行上存在“发送代理”设置,则该协议可用于连接到服务器。 它是基于每个服务器启用的,因此可以将其仅启用远程服务器,并且本地服务器的行为不同。 如果传入的连接被“accept-proxy”接受,那么被中继的信息是在这个连接的PROXY线路中通告的信息。

而这一点和我在v2上能find的一样多:

Haproxy 1.5还实现PROXY协议的版本2作为发送者。 此外,还添加了具有有限的可选SSL信息的TLV。