Amazon web services 双代理请求-获取原始ip

Amazon web services 双代理请求-获取原始ip,amazon-web-services,ip,cloudflare,x-forwarded-for,Amazon Web Services,Ip,Cloudflare,X Forwarded For,我有以下设置: 用户向cloudflare发出请求,该请求充当该请求的代理,并将其重定向到aws网络负载均衡器,该网络负载均衡器最终将其路由到其目标 在这里,我使用一个节点服务器(实际上是一个用socket.io制作的套接字)读取它,并需要从中获取原始ip 我试着这样读: 让ip=socket.request.headers['CF-Connecting-ip']| socket.request.headers['x-forwarded-for']| socket.request.connect

我有以下设置:

用户向cloudflare发出请求,该请求充当该请求的代理,并将其重定向到aws网络负载均衡器,该网络负载均衡器最终将其路由到其目标

在这里,我使用一个节点服务器(实际上是一个用socket.io制作的套接字)读取它,并需要从中获取原始ip

我试着这样读:

让ip=socket.request.headers['CF-Connecting-ip']| socket.request.headers['x-forwarded-for']| socket.request.connection.remoteAddress

cf和aws lb设置x-FORWARD-for

问题是我得到的是cf ip,而不是最终用户ip

如果我删除cf代理,一切都很好


在我看来,aws lb正在覆盖标题。您知道如何使aws lb不覆盖,而是添加到列表中,或者不执行任何操作吗?

如果您获得CF IP,则可能意味着它来自
x-forwarded-for
remoteAddress
CF连接IP
头是否根本未设置?在转储完整请求后,找到响应。CF客户端IP不可用,但CF连接IP确实可用。另外还有另一个解决方案,它有来自aws的标题,称为X-Original-Forwarded-For,用于保存“旧的”X-Forwarded-For@马克西万诺夫你是对的,事实上,这是解决方案之一。我使用了x-original-forwarded for变量,因为出于某种原因,socket.io将其传输到headers列表中,但不传输cf-connecting-ip(它还将所有头都小写),因此cf one更难使用。Mind
X-Forwarded-For
表示参与传递请求的代理链,它可能包含多个IP地址(逗号分隔),客户端IP在列表中是最左边的。@MaxIvanov确实应该是这样的。但是在上面提到的cf+aws设置中,只发送最后一个,而不是整个链。不知道为什么。三次检查后,它在某个地方被覆盖(我猜是在aws lb中)。如果您获得CF IP,则可能意味着它来自
x-forwarded-for
remoteAddress
CF连接IP
头是否根本未设置?在转储完整请求后,找到响应。CF客户端IP不可用,但CF连接IP确实可用。另外还有另一个解决方案,它有来自aws的标题,称为X-Original-Forwarded-For,用于保存“旧的”X-Forwarded-For@马克西万诺夫你是对的,事实上,这是解决方案之一。我使用了x-original-forwarded for变量,因为出于某种原因,socket.io将其传输到headers列表中,但不传输cf-connecting-ip(它还将所有头都小写),因此cf one更难使用。Mind
X-Forwarded-For
表示参与传递请求的代理链,它可能包含多个IP地址(逗号分隔),客户端IP在列表中是最左边的。@MaxIvanov确实应该是这样的。但是在上面提到的cf+aws设置中,只发送最后一个,而不是整个链。不知道为什么。经过三次检查,它在某个地方被覆盖(我猜是在aws lb中)。