-1

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

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

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

我需要两个都支持。请帮忙!

4

2 回答 2

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"];
     }
于 2013-03-08T04:30:11.703 回答
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();

由于我不知道您的负载均衡器是如何工作的,因此我无法更明确地使用示例代码。

于 2013-03-07T11:13:57.723 回答