ASP.NET负载均衡器IP检测

时间:2013-03-07 11:02:06

标签: asp.net

我目前正在使用以下代码检测IP地址。

<code>
    IP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
</code>

当我们没有负载均衡器时,这种方法有效,但是在负载均衡器存在的情况下它不起作用。

我需要支持两者。请帮忙!

2 个答案:

答案 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();

由于我不知道你的负载均衡器是如何工作的,所以我不能用示例代码更明确。