【问题标题】:Getting client values of IIS Server Variables in Load Balanced Environment在负载平衡环境中获取 IIS 服务器变量的客户端值
【发布时间】:2011-06-24 05:02:32
【问题描述】:

我有一个 intranet ASP.NET Web 应用程序,我需要在其中获取客户端机器的 IP。我通过以下代码执行此操作:

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

当我的 ASP.NET 站点仅托管在单个服务器上时,它曾经可以工作。但是,一旦我们安装了负载均衡器并将我们的应用程序迁移到网络场,上面的代码将返回 Load Balancer 设备的 IP,而不是客户端的 IP。

我正在与网络人员一起确定可以使用负载平衡器进行不同配置的内容,但同时我想知道除了使用该 IIS 服务器变量之外,是否还有其他方法可以获得客户端的 IP?或者有什么其他建议?

谢谢!

【问题讨论】:

    标签: asp.net iis load-balancing


    【解决方案1】:

    您使用的是哪个负载均衡器?听起来好像您的负载均衡器正在充当 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")
    

    如果代理已经这样做了,这可能已经工作了。

    实际上,您的选择取决于您的负载平衡器的功能以及可配置的功能。请注意上面 wiki 页面底部的常见硬件供应商列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 2021-07-26
      相关资源
      最近更新 更多