服务器记录错误 IP(代理/防火墙/负载均衡器)

服务器记录错误 IP(代理/防火墙/负载均衡器)

我有一台运行 Windows Server Web 2008 和安装的 plesk 10 的 VDS 服务器。我发现我在我的网站代码 asp.net/php 上获取的不是访问者 IP,而是一个固定 IP (178.18.198.2)。我也在 IIS 日志文件中获取了这个 IP。有人能解释一下发生了什么吗?

我的服务器 IP 为 178.18.198.90 - 178.18.198.94,子网掩码为 178.18.198.1。此服务器上运行的一个网站是innovacube.com

Stack Overflow 上关于同一问题的问题无法获取用户 IP 地址

更新公司建议我使用 HTTP_CLIENT_IP 标头而不是 REMOTE_ADDR,对于我必须使用的 IIS 日志也是如此Microsoft Internet 信息服务 XCLIENT.DLLISAPI 过滤器。

如何让 Web 服务器日志显示客户端的真实 IP 地址作为所有 HTTP 请求的源 IP 地址?

这里还有另一篇有用的文章:HOWTO:ISAPI 过滤器记录负载平衡 IIS 服务器的原始客户端 IP

答案1

178.18.198.2 显然是一个代理和/或防火墙,所有传入请求都通过它。当我访问http://innovacube.com/key.aspx,我明白我的HTTP_CLIENT_IP 字段中的 IP 地址,这就是为什么我怀疑您的神秘 .2 设备确实是一个代理,而且显然是一个透明的代理,因为nslookupinnovacube.com 返回 178.18.198.90。

在您的代码中,您应该使用此字段来确定访问者的 IP 地址,并更新您的日志以记录此标头(抱歉,不知道如何对 IIS 执行此操作)。但请注意,在这些服务器上有效的方法可能在另一个环境/另一个网络上不起作用。

答案2

是不是因为您的路由器/默认网关正在对传入请求进行网络地址转换,从而导致您的服务器日志充满该设备的 IP?

答案3

尝试得到这个

context.Request.ServerVariables["HTTP_X_CLUSTER_CLIENT_IP"]

就我而言,它是有效的。

相关内容