-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 に入れます。この httpheader は ASP.NET から読み取ることができます。

とにかく、ロード バランサーのドキュメントを読み、ロード バランサーがクライアント ブラウザーの IP を Web サーバーに送信する方法を確認する必要があります。

ロード バランサーからクライアント IP を取得する方法がわかったら、コードで値を確認できます。

元:

function getClientIP{

    var IP = getClientIPfromLoadBalancer();

    If  (IP != null){return IP;}
    else {return getClientIPfromRequest();}
}

IP = getClientIP();

あなたのロードバランサーがどのように機能するか分からないので、サンプルコードでこれ以上明確にすることはできません.

于 2013-03-07T11:13:57.723 に答える