10

我们目前正在使用Lighttpd和FastCGI为我们的客户提供PHP服务。我们最近通过RackSpace Cloud添加了负载均衡功能,以帮助我们处理流量,但客户端的IP现在是负载平衡器IP。所有流量都是通过HTTPS。通过https与Rackspace Cloud负载均衡器的客户端IP问题地址

我们启用了mod_extforward并尝试了使用我们的LB IP和不同的头文件(“X-Forwarded-For”,“Forwarded-For”,“X-Cluster-Client-Ip”)的所有不同配置。我们似乎无法得到这个工作!

任何想法?谢谢!

+2

因此,您的问题是“RackSpace Cloud在哪个头部发送客户端IP?”应该是“X-Forwarded-For”,但为什么不简单地转储标题并寻找自己。 – AndreKR

+0

我不确定如何做到这一点。有什么帮助吗? – Kaiser

+1

你已经尝试过查看'phpinfo()'输出的IP地址吗?在PHP 5.4下,可以使用'getallheaders()',对于早期版本,最简单的方法可能是使用'tcpdump -s 2000 -w dump',然后将这个转储扔到Wireshark中。 – AndreKR

回答

7

如果您使用Rackspace的云负载均衡器,您将无法通过SSL获取客户端的IP地址。

对于普通的HTTP,平衡器可以做智能事物(“服务不可用”页面,X-Forwarded-for等)。但是,负载均衡器除了客户端和服务器之间的渡口字节通过HTTPS,因为没有私钥,没有办法修改流(除非使其无效)。

某人asked this question在Rackspace论坛上不久前。

+1

这是否有任何更新? – ecorvo

0

Rackspace添加了SSL终止,因此您可以让负载均衡器解密流量并将未加密的流量传递到其服务器节点。有关更多信息,请参阅this。当然,这意味着您要通过负载均衡器到Web服务器的有效公共链接发送流量。而且,它的唯一可用通过他们的API而不是Web控制台,这吸引。

1

据Rackspace公司,SSL终止不应该,如果你的web应用所使用正在传送个人身份信息(PII)

http://www.rackspace.com/knowledge_center/product-faq/cloud-load-balancers

我不得不求助于在cookie中设置客户端的IP。该cookie设置为JavaScript。客户端的IP是通过向服务器(而不是负载均衡器后面)发起jsonp调用获得的,该服务器提供客户端的公有IP。这就是我所能想到的,我仍然可以利用Rackspace的云负载平衡器。

+0

这不是一个合法的免责声明,但建议如果未加密的流量只经过Rackspace的内部网络,它是非常安全的。根据Rackspace的说法;“”“Aaron M(26/01/2017,14:20:29):您不必担心流量,接口配置为不允许从管理程序级别进行数据包嗅探/捕获,因此它将无法从另一台服务器捕获“”“ – MagicLAMP

0

我在负载均衡器和Rackspace下为服务器安装mod_rpaf。然后任何PHP代码就像以前一样REMOTE_ADDR

+0

链接?示例配置?为什么/如何解决问题? – Synchro

+0

可以在Apache 2.2中轻松配置'mod_rpaf',以基于'X的值重写'REMOTE_ADDR' -Forwarded-For“或另一个HTTP头,这将导致标准日志以及PHP等解释器通过客户端的IP而不是负载均衡器的IP来接收更正后的'REMOTE_ADDR' 在Apache 2.4中,标准的'mod_remoteip'模块执行类似的工作。 – gid

0

我发现解决这个问题的一种方法是使用CloudFlare。除了它提供的所有附加功能和优点之外,它实际上是一个代理本身,并将包含它自己的x-forwarded-for标头。

这会绕过问题,因为x-forwarded-for标头在到达机架空间负载平衡器之前已经存在,所以它不需要添加任何东西。客户端IP地址将已经在标题中。

请注意:即使使用可信代理列表,这种方法并不完全万无一失。可以通过修改计算机的主机文件并绕过cloudflare来欺骗IP地址,直接连接到负载平衡器。我不会将这种技术用于需要高度安全性的任何事情。