【问题标题】:Detect IP Address of Client Passing though Amazon Load Balancer检测通过 Amazon 负载均衡器的客户端 IP 地址
【发布时间】:2013-12-13 01:53:36
【问题描述】:

重要的是,我的网站(位于 Amazon EC2 实例上)能够检测到客户端的 IP 地址。 HttpRequest.UserHostAddress 属性没有任何价值,因为它仅包含代理入站请求的 Amazon 负载均衡器的 IP 地址。

研究 StackOverflow 让我了解到使用 HttpRequest.Headers[“X-Forwarded-For”] 会提供客户端的公共 IP 地址,而且事实上,我已经使用这种技术一年了,没有任何问题。直到今天。

今天我开始看到某个特定用户的 IP 地址 10.116.146.52 被报告。这显然是一个私有 IP 地址。 X-Forwarded-For 似乎已经停止工作——但仅限于这个用户。使该用户与众不同的一件事是他从中国登录。当他使用同一台笔记本电脑并从美国登录时,没有问题。只有当连接来自中国时,才会出现问题。

最后,我想指出,我意识到X-Forwarded-For 可以包含一个以逗号分隔的 IP 地址列表,而不仅仅是一个。在这种情况下,我总是抓住链中的第一个,因为这应该是用户的公共 IP 来源,正如讨论 X-Forwarded-For 的 Wikipedia 文章中所述。

【问题讨论】:

  • 你应该在AWS Forum 上发布这个问题,亚马逊的人可以看看幕后,让你有一些见解。

标签: amazon-ec2 ip-address load-balancing


【解决方案1】:

发生这种情况是因为用户正在使用额外的代理服务器,该服务器正在添加自己的 X-Forwarded-For 标头。如您所说,标头将包含多个值,第一个应该是客户端的实际 IP。

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-headers 有更多信息。

【讨论】:

    【解决方案2】:

    在:c:\coldfusion10\cfusion\runtime\conf\server.xml

    添加

    <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto" remoteIpHeader="X-Forwarded-For" protocolHeaderHttpsValue="https" />
    

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false">
    

    将其粘贴在第一个阀门下方(第 144 行附近)

    完美运行。

    【讨论】:

    • 似乎与实际问题无关。
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多