2011-02-09 2 views
1

인트라넷 클라이언트 컴퓨터의 IP를 가져와야하는 ASP.NET 웹 응용 프로그램입니다. 다음 코드를 사용하여이 작업을 수행합니다.로드 균형 조정 환경에서 IIS 서버 변수의 클라이언트 값 가져 오기

HttpContext.Current.Request.ServerVariables.Item("REMOTE_HOST") 

내 ASP.NET 사이트가 단일 서버에서만 호스팅되는 경우에 사용됩니다. 그러나 일단로드 밸런서가 설치되고 웹 팜으로 마이그레이션되면, 위의 코드는 더 이상 클라이언트가 아닌 Load Balancer 장치의 IP를 반환합니다.

로드 밸런서와 다르게 구성 할 수있는 항목을 결정하기 위해 네트워킹 담당자와 협력하고 있지만 그 동안에는 IIS 서버 변수를 사용하는 것 외의 다른 클라이언트 IP를 얻을 수있는 다른 방법이 있는지 궁금합니다. 아니면 다른 제안?

감사합니다.

답변

2

어떤 부하 분산 장치를 사용하고 있습니까? 로드 밸런서가 웹 트래픽의 프록시 역할을하는 것처럼 들리므로 소스가 LB에서 오는 것처럼 보입니다. 대부분의 하드웨어로드 밸런서는 Linux 플랫폼을 기반으로하며 커널이 지원하는 경우 투명성을위한 조항이 있습니다. http://www.mjmwired.net/kernel/Documentation/networking/tproxy.txt 그러나이 경우 장치에 대한 루트 액세스와 가동 중지 시간이 필요할 수 있습니다. 그러나 아이디어가 없으면 공급 업체 지원 팀에 언급할만한 가치가있을 수 있습니다.

또 다른 (잘하면 훨씬 더 쉽게) 옵션 : 당신은 HTTP의 X-전달-에 대한 헤더에 클라이언트의 소스 IP를 작성하는로드 밸런서의 프록시를 구성 할 수 있습니다 : http://en.wikipedia.org/wiki/X-Forwarded-For 을 그리고 당신이 읽을 수 있습니다 비슷한 방식으로 ASP.net을 통해이 헤더 :

Request.ServerVariables("X-Forwarded-For") 

프록시가 이미이를 수행하고있는 경우 이미 작동 할 수 있습니다.

로드 균형 조정기가 수행 할 수있는 작업과 구성 할 수있는 내용에 따라 실제로 옵션이 달라질 수 있습니다. 위의 위키 페이지 하단에 일반적인 하드웨어 공급 업체 목록을 참고하십시오.

관련 문제