【问题标题】:NLog aspnet-request-ip property only logs the load balancer IP addressNLog aspnet-request-ip 属性只记录负载均衡器 IP 地址
【发布时间】:2019-10-25 12:56:46
【问题描述】:

我正在使用 NLog 进行日志记录。我需要记录打开网站的用户的 IP 地址。

为此,我使用了 NLog 的 aspnet-request-ip 属性。文档在这里:https://github.com/NLog/NLog/wiki/AspNet-Request-IP-Layout-Renderer

我在 NLog 配置中的布局现在如下所示:

layout='"${longdate:universalTime=true}","${level}",${aspnet-request-ip},"${message}"'

问题是 - 记录的 IP 地址是托管网站的机器的 IP。但我需要打开/请求网站的用户的 IP。我需要记录从哪个 IP 请求/打开网站。

我该怎么做?或者为什么aspnet-request-ip 记录的是主机 IP 地址,而不是用户/客户端 IP 地址?

【问题讨论】:

  • 中间有负载均衡器吗?
  • @Julian 是的。但是负载均衡器不会将原始请求信息传递给服务器吗?所以你认为我的问题是由于负载均衡器造成的?
  • 我认为CheckForwardedForHeader 属性是用于获取客户端IP,即使有负载均衡器或网关?如何使用该属性?喜欢这个${aspnet-request-ip:CheckForwardedForHeader=true} ?
  • 确实如此。我添加了一个答案来解释一下。

标签: asp.net asp.net-mvc nlog


【解决方案1】:

如果您使用的是负载平衡器(在这种情况下),请求 IP 将是负载平衡器的 IP。本质上,您正在获取负载均衡器的请求,因此这是发送方的 IP。

所以你需要:

${aspnet-request-ip:CheckForwardedForHeader=true}

这将获得 X-Forwarded-For 标头的 IP,这是负载均衡器发送客户端 IP 的事实标准。见X-Forwarded-For on MDN

X-Forwarded-For (XFF) 标头是事实上的标准标头,用于识别通过 HTTP 代理或负载平衡器连接到 Web 服务器的客户端的原始 IP 地址。当客户端和服务器之间的流量被截获时,服务器访问日志仅包含代理或负载均衡器的 IP 地址。要查看客户端的原始 IP 地址,使用了 X-Forwarded-For 请求头。

注意:不要为无负载平衡的情况启用 CheckForwardedForHeader,因为用户可以通过发送该标头来发送 IP。

docs

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2018-04-22
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多