![服务器记录错误 IP(代理/防火墙/负载均衡器)](https://linux22.com/image/549521/%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%B0%E5%BD%95%E9%94%99%E8%AF%AF%20IP%EF%BC%88%E4%BB%A3%E7%90%86%2F%E9%98%B2%E7%81%AB%E5%A2%99%2F%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%EF%BC%89.png)
我有一台运行 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 设备确实是一个代理,而且显然是一个透明的代理,因为nslookup
innovacube.com 返回 178.18.198.90。
在您的代码中,您应该使用此字段来确定访问者的 IP 地址,并更新您的日志以记录此标头(抱歉,不知道如何对 IIS 执行此操作)。但请注意,在这些服务器上有效的方法可能在另一个环境/另一个网络上不起作用。
答案2
是不是因为您的路由器/默认网关正在对传入请求进行网络地址转换,从而导致您的服务器日志充满该设备的 IP?
答案3
尝试得到这个
context.Request.ServerVariables["HTTP_X_CLUSTER_CLIENT_IP"]
就我而言,它是有效的。