我有一个 intranet ASP.NET Web应用程序,我需要在其中获取客户端计算机的IP。我这样做是为了以下代码:
HttpContext.Current.Request.ServerVariables.Item("REMOTE_HOST")
当我的ASP.NET站点仅托管在单个服务器上时,它曾经工作过。但是,一旦我们安装了负载均衡器并将我们的应用程序迁移到Web场,上面的代码就会返回 Load Balancer 设备的IP而不再是客户端的IP。
我正在与网络人员一起确定可以使用负载均衡器进行不同配置的内容,但与此同时我想知道除了使用IIS服务器变量之外是否还有其他方式可以获取客户端的IP?还是其他任何建议?
谢谢!
答案 0 :(得分:2)
您使用的是哪种负载均衡器?听起来好像您的负载均衡器充当了Web流量的代理,因此源似乎来自LB.大多数硬件负载平衡器都是在Linux平台上构建的,如果内核支持它,则提供透明性: http://www.mjmwired.net/kernel/Documentation/networking/tproxy.txt 但是,这可能需要root访问设备和一些停机时间。但如果供应商的支持团队没有任何想法,那么这可能值得一提。
另一个(希望更容易)选项:您可以配置负载均衡器的代理,以在HTTP x-forwarded-for标头中写入客户端的源IP: http://en.wikipedia.org/wiki/X-Forwarded-For 然后,您将能够以类似的方式通过ASP.net读取此标题:
Request.ServerVariables("X-Forwarded-For")
如果代理已经这样做,这可能已经有效了。
真的,你的选择取决于你的负载均衡器能够做什么,以及什么是可配置的。请注意上面维基页面底部的常见硬件供应商列表。