我们将ASP.NET应用程序托管在两个位于硬件负载平衡器后面的Web服务器(Server 2003,IIS 6)上。当我查看IIS日志时,IIS(v6)日志中的c-ip值始终是负载均衡器的IP地址。我注意到在http标头中,有一个X-Forwarded-For标头似乎有请求的IP地址。我可以做些什么来让IIS在日志中记录这个标题值吗?
答案 0 :(得分:5)
我不知道它已经存在了多长时间,但 IIS 7及以上的Advanced Logging extension (在Windows Server 2008及更高版本上)提供Custom logging functionality可以是用于在IIS日志文件中收集(几乎)任意信息,包括自定义HTTP请求(和响应)标头,如 X-Forwarded-For 。
我今天刚刚在我们的服务器上进行了设置,它运行得非常好。
需要注意的一点是:不要使用%COMPUTERNAME%-Server 的名称编辑默认的日志定义,而只需在您的站点上创建一个新的或在服务器上全局创建一个新的日志定义以避免异常“该请求不受支持。“在尝试保存更改时。当您尝试在站点级别编辑该默认定义时会发生这种情况(感谢this thread的答案)。
答案 1 :(得分:3)
通过代理时,x-forwarded-for是负载均衡器最多的commonly used。你可以写一个httpfilter来自己交换它;或IIS Tracer能够使用标准文件;包括交换c-ip和x-forwarded字段。
如果没有使用第三方报告工具;您可能希望将日志转储到SQL Server,您可以随时操作列。
我个人选择后者,以便我可以获得所有服务器的汇总数据;我转储到同一个数据库中的不同表中,然后从服务器场中的所有Web服务器进行报告。我还发现它比管理500mb左右的日志文件更容易。
答案 2 :(得分:2)
F5网络在devcentral.f5.com上提供了一个ISAPI过滤器,它将采用x-forwarded-for并在日志中使用它。
除此之外,你无能为力 - 这就是TCP的工作原理。 :)
答案 3 :(得分:2)
这是一个非常古老的问题,但我想补充说IIS 8.5具有编写功能 自定义HTTP标头到IIS日志。这是一个比安装ISAPI过滤器或HTTP模块更好的选择。
本演练演示如何通过IIS管理器进行设置: http://www.iis.net/learn/get-started/whats-new-in-iis-85/enhanced-logging-for-iis85
另一个SO问题显示了如何使用PowerShell执行此操作: Add IIS 8.5 Custom Logging Fields with Powershell
答案 4 :(得分:0)
IIS 8.5高级日志记录将允许您轻松记录X-FORWAREDED-FOR标头。