我的网站(位于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
。
答案 0 :(得分:0)
这是因为用户正在使用添加自己的X-Forwarded-For
标头的其他代理服务器。如你所说,标题将包含多个值,第一个应该是客户端的实际IP。
答案 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行附近)
完美无缺。