![通过 HTTPS 在 HAProxy 后面的 IIS 服务器上获取客户端 IP 地址](https://linux22.com/image/552437/%E9%80%9A%E8%BF%87%20HTTPS%20%E5%9C%A8%20HAProxy%20%E5%90%8E%E9%9D%A2%E7%9A%84%20IIS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%8E%B7%E5%8F%96%E5%AE%A2%E6%88%B7%E7%AB%AF%20IP%20%E5%9C%B0%E5%9D%80.png)
我们正在设置两个 IIS 服务器,它们将在运行 HAProxy 的服务器后面进行负载平衡。
所有到这些服务器的流量都将通过 HTTPS 传输。
我们注意到的问题是,所有流量都被记录在 IIS 服务器上,作为来自 HAProxy 服务器 IP 的流量。虽然这在技术上是正确的,但我正在尝试弄清楚如何才能在 IIS 服务器上“看到”原始客户端 IP 地址以进行记录。
我们在 HAProxy 和 IIS 上都设置了 X-Forwarded-For(通过安装F5 的 X-Forwarded-For ISAPI 过滤器),但这似乎只对 HTTP 流量有帮助。HTTPS 仍被记录为来自 HAProxy 服务器。
谢谢你的帮助!
答案1
这是代理的“正常”副作用。您应该在匹配的代理上有相应的日志。
答案2
听起来你有一个正确的 HTTP 解决方案。我会检查 HAProxy 以确保它正确地卸载 SSL。如果它不加任何改动地传递请求,它就没有能力添加 X-Forwarded-For 标头。但是如果你卸载它,那么它应该将 HAProxy 的请求作为 HTTP 发送(确保它是一个受信任的交换网络)。然后它可以添加必要的 HTTP 标头,包括一些 SSL HTTP 标头。
答案3
针对 Scott 的说明(抱歉,我暂时无法评论),HAProxy 在卸载 SSL 后能否重新加密连接?我们使用 ARR,卸载后将原始客户端 IP 放入 X-Forwarded-For 中,然后再次将其作为 SSL 发送。然后,我们使用 ARR Helper 工具将 X-Forwarded-For 放回客户端 IP,以便它能够很好地显示在日志中。
因此,基本上,我们对客户端和 Web 服务器之间的整个连接都进行了 SSL 保护,只是在通过 ARR 时进行解密、插入客户端 IP 和加密。那么问题是,HAProxy 能做同样的事情吗?