11

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

我们启用了 mod_extforward 并尝试了所有不同的配置来使用我们的 LB IP 和不同的标头(“X-Forwarded-For”、“Forwarded-For”、“X-Cluster-Client-Ip”),但我们似乎无法让它工作!

有任何想法吗?谢谢!

4

6 回答 6

8

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

对于纯 HTTP,平衡器可以做一些智能的事情(“服务不可用”页面、X-Forwarded-for 等)。但是,负载平衡器除了通过 HTTPS 在客户端和服务器之间传送字节之外,不能做任何事情,因为,没有私钥,就无法修改流(除了使其无效。)

不久前有人在 Rackspace 论坛上问过这个问题。

于 2012-02-29T02:21:21.350 回答
1

根据 Rackspace,如果您的 Web 应用程序正在传输个人身份信息 (PII),则不应使用 SSL 终止

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

我不得不求助于在 cookie 中设置客户端的 IP。cookie 是在 javascript 中设置的。客户端的 IP 是通过对提供客户端公共 IP 的服务器(不在负载均衡器后面)进行 jsonp 调用来获得的。这就是我能想到的仍然可以使用 Rackspace 的云负载均衡器的地方。

于 2014-05-01T15:26:01.597 回答
0

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

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

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

于 2014-12-17T15:07:23.057 回答
0

我为负载平衡器和 Rackspace 下的服务器安装 mod_rpaf。然后使用 REMOTE_ADDR 任何 PHP 代码都可以像以前一样工作

于 2014-10-15T16:19:35.010 回答
0

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

于 2012-08-26T01:21:24.033 回答
0

您实际上可以在这里看到:

http://www.rackspace.com/knowledge_center/article/why-does-every-visitor-to-my-cloud-sites-website-have-the-same-ip-address

用于 SSL 的正确 PHP 变量是:

$_SERVER['HTTP_X_FORWARDED_FOR']
于 2012-11-11T18:00:42.770 回答