检测通过Amazon Load Balancer传递的客户端的IP地址

时间:2013-12-13 01:53:37

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

我的网站(位于Amazon EC2实例上)能够检测到客户端的IP地址,这一点非常重要。 HttpRequest.UserHostAddress属性没有任何价值,因为它只包含代理入站请求的Amazon Load Balancer的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

2 个答案:

答案 0 :(得分:0)

这是因为用户正在使用添加自己的X-Forwarded-For标头的其他代理服务器。如你所说,标题将包含多个值,第一个应该是客户端的实际IP。

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

答案 1 :(得分:-1)

in: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行附近)

完美无缺。