我目前正在使用以下代码检测IP地址。
<code>
IP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
</code>
当我们没有负载均衡器时,这种方法有效,但是在负载均衡器存在的情况下它不起作用。
我需要支持两者。请帮忙!
答案 0 :(得分:1)
我在上面的代码中使用了下面提到的代码,在上下文中不存在: -
IP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
//Not Behind the Load balancer or proxy server
if (IP == null)
{
IP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
答案 1 :(得分:0)
原始请求IP由负载均衡器IP覆盖,因为负载均衡器是重新接收请求的计算机。您的Web服务器从平衡器收集请求,而不是从客户端浏览器收到请求。
某些负载均衡器将原始请求IP放在HTTPHeaders中。您可以从ASP.NET中读取此httpheader。
无论如何,您必须阅读负载均衡器文档并检查负载均衡器如何将客户端浏览器IP发送到Web服务器。
一旦您知道如何从负载均衡器获取客户端IP,您就可以检查代码中的值。
例如:
function getClientIP{
var IP = getClientIPfromLoadBalancer();
If (IP != null){return IP;}
else {return getClientIPfromRequest();}
}
IP = getClientIP();
由于我不知道你的负载均衡器是如何工作的,所以我不能用示例代码更明确。