Asp.net NLog aspnet请求ip属性仅记录负载平衡器ip地址

Asp.net NLog aspnet请求ip属性仅记录负载平衡器ip地址,asp.net,asp.net-mvc,nlog,Asp.net,Asp.net Mvc,Nlog,我正在使用NLog进行日志记录。我需要记录打开网站的用户的IP地址 为此,我使用NLog的aspnet请求ip属性。文件如下: 我现在在NLog配置中的布局如下所示: layout='"${longdate:universalTime=true}","${level}",${aspnet-request-ip},"${message}"' 问题是-记录的IP地址是承载网站的计算机的IP。但是我需要打开/请求网站的用户的IP。我需要记录请求/打开网站的IP地址 我该怎么做?或者为什么aspnet

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

为此,我使用NLog的
aspnet请求ip
属性。文件如下:

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

layout='"${longdate:universalTime=true}","${level}",${aspnet-request-ip},"${message}"'
问题是-记录的IP地址是承载网站的计算机的IP。但是我需要打开/请求网站的用户的IP。我需要记录请求/打开网站的IP地址


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

如果您使用的是负载平衡器(在这种情况下也是如此),则请求ip将是负载平衡器的ip。本质上,您得到的是负载平衡器的请求,因此这就是发送方的IP

因此,我认为您需要:

${aspnet-request-ip:CheckForwardedForHeader=true}
这将获得X-Forwarded-For报头的IP,这是负载平衡器发送客户端IP的事实标准。看

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

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


请参见

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