【问题标题】:Client IP issue address over https with Rackspace Cloud Load Balancers使用 Rackspace 云负载均衡器通过 https 的客户端 IP 问题地址
【发布时间】:2011-12-24 22:09:18
【问题描述】:

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

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

有什么想法吗?谢谢!

【问题讨论】:

  • 所以您的问题是“RackSpace Cloud 在哪个标头中发送客户端 IP?”应该是“X-Forwarded-For”,但为什么不简单地转储标题并自己寻找。
  • 我不太确定该怎么做。有什么帮助吗?
  • 您已经尝试查看phpinfo() 的输出以获取您的IP 地址?在 PHP 5.4 下,您可以使用 getallheaders(),对于早期版本,最简单的方法可能是使用 tcpdump -s 2000 -w dump,然后将此转储扔到 Wireshark 中。
  • 感谢您的帮助。我们结束了部署自己的负载平衡而不是使用 RackSpace 并解决了问题。对于它的价值,他们的支持关闭了我们的票并且不会帮助我们。 :(
  • 您是否尝试过配置 true-client-ip?

标签: https ip-address load-balancing reverse-proxy rackspace-cloud


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 链接?示例配置?为什么/如何解决问题?
    • mod_rpaf 可以在 Apache 2.2 中轻松配置,以根据 X-Forwarded-For 的值或其他 HTTP 标头重写 REMOTE_ADDR。然后,这将导致标准日志以及 PHP 等解释器收到带有客户端 IP 而不是负载平衡器 IP 的更正 REMOTE_ADDR。在 Apache 2.4 中,标准的 mod_remoteip 模块做了类似的工作。
    【解决方案3】:

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

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

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

    【讨论】:

    • 这不是法律免责声明,而是建议。如果未加密的流量只通过 Rackspace 的内部网络,它是非常安全的。根据机架空间; """Aaron M (26/01/2017, 14:20:29): 你不必担心流量,接口被配置为不允许从管理程序级别嗅探/捕获数据包,因此不会可以从另一台服务器 """ 捕获
    【解决方案4】:

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

    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']
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

        • 该问题链接现已损坏,很遗憾
        猜你喜欢
        • 1970-01-01
        • 2021-01-23
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多